barreleye_common/models/
amount.rs1use clickhouse::Row;
2use eyre::Result;
3use serde::{Deserialize, Serialize};
4
5use crate::{
6 chain::{u256, U256},
7 warehouse::Warehouse,
8};
9
10static TABLE: &str = "amounts";
11
12#[derive(PartialEq, Eq, Hash, Debug, Clone, Row, Serialize, Deserialize)]
13pub struct Model {
14 pub network_id: u64,
15 pub address: String,
16 pub asset_address: String,
17 #[serde(with = "u256")]
18 pub amount: U256,
19}
20
21pub use Model as Amount;
22
23impl Model {
24 pub async fn get_all_by_address(warehouse: &Warehouse, address: &str) -> Result<Vec<Model>> {
25 Ok(warehouse
29 .get()
30 .query(&format!(
31 r#"
32 SELECT *
33 FROM (
34 SELECT
35 network_id,
36 address,
37 asset_address,
38 SUM(amount) as amount
39 FROM {TABLE}
40 WHERE address = ?
41 GROUP BY (network_id, address, asset_address)
42 )
43 WHERE amount >= 0
44 "#
45 ))
46 .bind(address)
47 .fetch_all::<Model>()
48 .await?)
49 }
50}