Skip to content

Commit f7e8ad9

Browse files
committed
refactor
1 parent 8fbf7b0 commit f7e8ad9

File tree

13 files changed

+343
-82
lines changed

13 files changed

+343
-82
lines changed

crates/cli/src/commands/vault/list_balance_changes.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,11 +166,11 @@ mod tests {
166166
assert!(cli_vault_balance_changes_list_args.execute().await.is_err());
167167
}
168168

169-
// helper function that returns mocked sg response in json
170169
fn get_sg_response() -> Value {
171170
json!({
172171
"data": {
173172
"vaultBalanceChanges": [{
173+
"id": encode_prefixed(B256::random()),
174174
"__typename": "Deposit",
175175
"amount": F0,
176176
"newVaultBalance": F0,

crates/common/src/local_db/query/fetch_vault_balance_changes/mod.rs

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ use crate::local_db::{
22
query::{SqlBuildError, SqlStatement, SqlValue},
33
OrderbookIdentifier,
44
};
5-
use crate::raindex_client::vaults::VaultBalanceChangeFilter;
5+
use crate::types::VaultBalanceChangeKind;
66
use alloy::primitives::{Address, B256, U256};
77
use serde::{Deserialize, Serialize};
88

@@ -30,7 +30,7 @@ pub fn build_fetch_balance_changes_stmt(
3030
vault_id: U256,
3131
token: Address,
3232
owner: Address,
33-
filter_types: Option<&[VaultBalanceChangeFilter]>,
33+
filter_kinds: Option<&[VaultBalanceChangeKind]>,
3434
) -> Result<SqlStatement, SqlBuildError> {
3535
let mut stmt = SqlStatement::new(QUERY_TEMPLATE);
3636

@@ -40,12 +40,11 @@ pub fn build_fetch_balance_changes_stmt(
4040
stmt.push(SqlValue::from(token));
4141
stmt.push(SqlValue::from(owner));
4242

43-
let change_type_strings: Vec<String> = filter_types
44-
.map(|filters| {
45-
filters
43+
let change_type_strings: Vec<&'static str> = filter_kinds
44+
.map(|kinds| {
45+
kinds
4646
.iter()
47-
.flat_map(|f| f.to_local_db_types())
48-
.map(String::from)
47+
.flat_map(|k| k.to_local_db_change_types().iter().copied())
4948
.collect()
5049
})
5150
.unwrap_or_default();
@@ -88,7 +87,7 @@ mod tests {
8887
U256::from(1),
8988
Address::ZERO,
9089
Address::ZERO,
91-
Some(&[VaultBalanceChangeFilter::Deposit]),
90+
Some(&[VaultBalanceChangeKind::Deposit]),
9291
)
9392
.unwrap();
9493
assert!(stmt.sql.contains("params AS"));
@@ -104,7 +103,7 @@ mod tests {
104103
U256::from(1),
105104
Address::ZERO,
106105
Address::ZERO,
107-
Some(&[VaultBalanceChangeFilter::TakeOrder]),
106+
Some(&[VaultBalanceChangeKind::TakeOrder]),
108107
)
109108
.unwrap();
110109
assert!(stmt.sql.contains("params AS"));
@@ -119,7 +118,7 @@ mod tests {
119118
U256::from(1),
120119
Address::ZERO,
121120
Address::ZERO,
122-
Some(&[VaultBalanceChangeFilter::Clear]),
121+
Some(&[VaultBalanceChangeKind::Clear]),
123122
)
124123
.unwrap();
125124
assert!(stmt.sql.contains("params AS"));
@@ -135,8 +134,8 @@ mod tests {
135134
Address::ZERO,
136135
Address::ZERO,
137136
Some(&[
138-
VaultBalanceChangeFilter::Deposit,
139-
VaultBalanceChangeFilter::Withdrawal,
137+
VaultBalanceChangeKind::Deposit,
138+
VaultBalanceChangeKind::Withdrawal,
140139
]),
141140
)
142141
.unwrap();

crates/common/src/raindex_client/local_db/query/fetch_vault_balance_changes.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use crate::local_db::query::fetch_vault_balance_changes::{
44
use crate::local_db::query::{LocalDbQueryError, LocalDbQueryExecutor};
55
use crate::local_db::OrderbookIdentifier;
66
use crate::raindex_client::vaults::VaultBalanceChangeFilter;
7+
use crate::types::VaultBalanceChangeKind;
78
use alloy::primitives::{Address, U256};
89

910
pub async fn fetch_vault_balance_changes<E: LocalDbQueryExecutor + ?Sized>(
@@ -14,7 +15,10 @@ pub async fn fetch_vault_balance_changes<E: LocalDbQueryExecutor + ?Sized>(
1415
owner: Address,
1516
filter_types: Option<&[VaultBalanceChangeFilter]>,
1617
) -> Result<Vec<LocalDbVaultBalanceChange>, LocalDbQueryError> {
17-
let stmt = build_fetch_balance_changes_stmt(ob_id, vault_id, token, owner, filter_types)?;
18+
let filter_kinds: Option<Vec<VaultBalanceChangeKind>> =
19+
filter_types.map(|filters| filters.iter().map(|f| f.to_kind()).collect());
20+
let stmt =
21+
build_fetch_balance_changes_stmt(ob_id, vault_id, token, owner, filter_kinds.as_deref())?;
1822
exec.query_json(&stmt).await
1923
}
2024

crates/common/src/raindex_client/vaults.rs

Lines changed: 39 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ use crate::local_db::{
66
};
77
use crate::raindex_client::local_db::query::fetch_vault_balance_changes::fetch_vault_balance_changes;
88
use crate::raindex_client::local_db::vaults::LocalDbVaults;
9+
use crate::types::VaultBalanceChangeKind;
910
use crate::{
1011
deposit::DepositArgs,
1112
erc20::ERC20,
@@ -629,27 +630,34 @@ pub enum RaindexVaultBalanceChangeType {
629630
Unknown,
630631
}
631632
impl_wasm_traits!(RaindexVaultBalanceChangeType);
633+
634+
impl From<VaultBalanceChangeKind> for RaindexVaultBalanceChangeType {
635+
fn from(kind: VaultBalanceChangeKind) -> Self {
636+
match kind {
637+
VaultBalanceChangeKind::Deposit => Self::Deposit,
638+
VaultBalanceChangeKind::Withdrawal => Self::Withdrawal,
639+
VaultBalanceChangeKind::TakeOrder => Self::TakeOrder,
640+
VaultBalanceChangeKind::Clear => Self::Clear,
641+
VaultBalanceChangeKind::ClearBounty => Self::ClearBounty,
642+
VaultBalanceChangeKind::Unknown => Self::Unknown,
643+
}
644+
}
645+
}
646+
632647
impl TryFrom<String> for RaindexVaultBalanceChangeType {
633648
type Error = RaindexError;
634649
fn try_from(value: String) -> Result<Self, Self::Error> {
635-
match value.as_str() {
636-
"Deposit" | "DEPOSIT" => Ok(RaindexVaultBalanceChangeType::Deposit),
637-
"Withdrawal" | "WITHDRAWAL" | "WITHDRAW" => {
638-
Ok(RaindexVaultBalanceChangeType::Withdrawal)
639-
}
640-
"TAKE_INPUT" | "TAKE_OUTPUT" => Ok(RaindexVaultBalanceChangeType::TakeOrder),
641-
"CLEAR_ALICE_INPUT" | "CLEAR_ALICE_OUTPUT" | "CLEAR_BOB_INPUT" | "CLEAR_BOB_OUTPUT" => {
642-
Ok(RaindexVaultBalanceChangeType::Clear)
650+
let kind = VaultBalanceChangeKind::from_local_db_change_type(&value);
651+
if matches!(kind, VaultBalanceChangeKind::Unknown) {
652+
let kind_from_sg = VaultBalanceChangeKind::from_subgraph_typename(&value);
653+
if matches!(kind_from_sg, VaultBalanceChangeKind::Unknown) && value != "Unknown" {
654+
return Err(RaindexError::InvalidVaultBalanceChangeType(value));
643655
}
644-
"ClearBounty" | "CLEAR_ALICE_BOUNTY" | "CLEAR_BOB_BOUNTY" => {
645-
Ok(RaindexVaultBalanceChangeType::ClearBounty)
646-
}
647-
"Unknown" | "UNKNOWN" => Ok(RaindexVaultBalanceChangeType::Unknown),
648-
_ => Err(RaindexError::InvalidVaultBalanceChangeType(value)),
656+
return Ok(kind_from_sg.into());
649657
}
658+
Ok(kind.into())
650659
}
651660
}
652-
impl RaindexVaultBalanceChangeType {}
653661

654662
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq, Hash, Tsify)]
655663
#[serde(rename_all = "camelCase")]
@@ -663,21 +671,20 @@ pub enum VaultBalanceChangeFilter {
663671
impl_wasm_traits!(VaultBalanceChangeFilter);
664672

665673
impl VaultBalanceChangeFilter {
666-
pub fn to_local_db_types(&self) -> Vec<&'static str> {
674+
pub fn to_kind(&self) -> VaultBalanceChangeKind {
667675
match self {
668-
Self::Deposit => vec!["DEPOSIT"],
669-
Self::Withdrawal => vec!["WITHDRAW"],
670-
Self::TakeOrder => vec!["TAKE_INPUT", "TAKE_OUTPUT"],
671-
Self::Clear => vec![
672-
"CLEAR_ALICE_INPUT",
673-
"CLEAR_ALICE_OUTPUT",
674-
"CLEAR_BOB_INPUT",
675-
"CLEAR_BOB_OUTPUT",
676-
],
677-
Self::ClearBounty => vec!["CLEAR_ALICE_BOUNTY", "CLEAR_BOB_BOUNTY"],
676+
Self::Deposit => VaultBalanceChangeKind::Deposit,
677+
Self::Withdrawal => VaultBalanceChangeKind::Withdrawal,
678+
Self::TakeOrder => VaultBalanceChangeKind::TakeOrder,
679+
Self::Clear => VaultBalanceChangeKind::Clear,
680+
Self::ClearBounty => VaultBalanceChangeKind::ClearBounty,
678681
}
679682
}
680683

684+
pub fn to_local_db_types(&self) -> &'static [&'static str] {
685+
self.to_kind().to_local_db_change_types()
686+
}
687+
681688
pub fn to_raindex_type(&self) -> RaindexVaultBalanceChangeType {
682689
match self {
683690
Self::Deposit => RaindexVaultBalanceChangeType::Deposit,
@@ -866,11 +873,11 @@ impl RaindexVaultBalanceChange {
866873
let formatted_new_balance = new_balance.format()?;
867874
let formatted_old_balance = old_balance.format()?;
868875

869-
let change_type = match balance_change.trade.trade_event.__typename.as_str() {
870-
"TakeOrder" => RaindexVaultBalanceChangeType::TakeOrder,
871-
"Clear" => RaindexVaultBalanceChangeType::Clear,
872-
_ => RaindexVaultBalanceChangeType::Unknown,
873-
};
876+
let change_type: RaindexVaultBalanceChangeType =
877+
VaultBalanceChangeKind::from_subgraph_typename(
878+
&balance_change.trade.trade_event.__typename,
879+
)
880+
.into();
874881

875882
Ok(Self {
876883
r#type: change_type,
@@ -1042,11 +1049,8 @@ impl RaindexVaultBalanceChange {
10421049
decimals,
10431050
};
10441051

1045-
let change_type = match balance.trade_kind.as_str() {
1046-
"take" => RaindexVaultBalanceChangeType::TakeOrder,
1047-
"clear" => RaindexVaultBalanceChangeType::Clear,
1048-
_ => RaindexVaultBalanceChangeType::Unknown,
1049-
};
1052+
let change_type: RaindexVaultBalanceChangeType =
1053+
VaultBalanceChangeKind::from_local_db_trade_kind(&balance.trade_kind).into();
10501054

10511055
Ok(Self {
10521056
r#type: change_type,

crates/common/src/types/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ mod orders_list_flattened;
55
mod token_vault_flattened;
66
mod vault;
77
mod vault_balance_change_flattened;
8+
mod vault_balance_change_kind;
89

910
pub use error::*;
1011
pub use order_detail_extended::*;
@@ -13,3 +14,4 @@ pub use orders_list_flattened::*;
1314
pub use token_vault_flattened::*;
1415
pub use vault::*;
1516
pub use vault_balance_change_flattened::*;
17+
pub use vault_balance_change_kind::*;

0 commit comments

Comments
 (0)