1use diesel::data_types::PgTimestamp;
5use diesel::{Identifiable, Insertable, Queryable, QueryableByName, Selectable};
6
7use serde::Serialize;
8use sui_indexer_builder::{LIVE_TASK_TARGET_CHECKPOINT, Task};
9
10use crate::schema::{
11 balances, balances_summary, flashloans, order_fills, order_updates, pool_prices, pools,
12 progress_store, proposals, rebates, stakes, sui_error_transactions, trade_params_update, votes,
13};
14
15#[derive(Queryable, Selectable, Insertable, Identifiable, Debug)]
16#[diesel(table_name = order_updates, primary_key(event_digest))]
17pub struct OrderUpdate {
18 pub event_digest: String,
19 pub digest: String,
20 pub sender: String,
21 pub checkpoint: i64,
22 pub checkpoint_timestamp_ms: i64,
23 pub package: String,
24 pub status: String,
25 pub pool_id: String,
26 pub order_id: String, pub client_order_id: i64,
28 pub price: i64,
29 pub is_bid: bool,
30 pub original_quantity: i64,
31 pub quantity: i64,
32 pub filled_quantity: i64,
33 pub onchain_timestamp: i64,
34 pub trader: String,
35 pub balance_manager_id: String,
36}
37
38#[derive(Queryable, Selectable, Insertable, Identifiable, Debug)]
39#[diesel(table_name = order_fills, primary_key(event_digest))]
40pub struct OrderFill {
41 pub event_digest: String,
42 pub digest: String,
43 pub sender: String,
44 pub checkpoint: i64,
45 pub checkpoint_timestamp_ms: i64,
46 pub package: String,
47 pub pool_id: String,
48 pub maker_order_id: String, pub taker_order_id: String, pub maker_client_order_id: i64,
51 pub taker_client_order_id: i64,
52 pub price: i64,
53 pub taker_fee: i64,
54 pub taker_fee_is_deep: bool,
55 pub maker_fee: i64,
56 pub maker_fee_is_deep: bool,
57 pub taker_is_bid: bool,
58 pub base_quantity: i64,
59 pub quote_quantity: i64,
60 pub maker_balance_manager_id: String,
61 pub taker_balance_manager_id: String,
62 pub onchain_timestamp: i64,
63}
64
65#[derive(Queryable)]
66pub struct OrderFillSummary {
67 pub pool_id: String,
68 pub maker_balance_manager_id: String,
69 pub taker_balance_manager_id: String,
70 pub quantity: i64,
71}
72
73#[derive(QueryableByName, Debug, Serialize)]
74#[diesel(table_name = balances_summary)]
75pub struct BalancesSummary {
76 pub asset: String,
77 pub amount: i64,
78 pub deposit: bool,
79}
80
81#[derive(Queryable, Selectable, Insertable, Identifiable, Debug)]
82#[diesel(table_name = flashloans, primary_key(event_digest))]
83pub struct Flashloan {
84 pub event_digest: String,
85 pub digest: String,
86 pub sender: String,
87 pub checkpoint: i64,
88 pub checkpoint_timestamp_ms: i64,
89 pub package: String,
90 pub pool_id: String,
91 pub borrow_quantity: i64,
92 pub borrow: bool,
93 pub type_name: String,
94}
95
96#[derive(Queryable, Selectable, Insertable, Identifiable, Debug)]
97#[diesel(table_name = pool_prices, primary_key(event_digest))]
98pub struct PoolPrice {
99 pub event_digest: String,
100 pub digest: String,
101 pub sender: String,
102 pub checkpoint: i64,
103 pub checkpoint_timestamp_ms: i64,
104 pub package: String,
105 pub target_pool: String,
106 pub reference_pool: String,
107 pub conversion_rate: i64,
108}
109
110#[derive(Queryable, Selectable, Insertable, Identifiable, Debug)]
111#[diesel(table_name = balances, primary_key(event_digest))]
112pub struct Balances {
113 pub event_digest: String,
114 pub digest: String,
115 pub sender: String,
116 pub checkpoint: i64,
117 pub checkpoint_timestamp_ms: i64,
118 pub package: String,
119 pub balance_manager_id: String,
120 pub asset: String,
121 pub amount: i64,
122 pub deposit: bool,
123}
124
125#[derive(Queryable, Selectable, Insertable, Identifiable, Debug)]
126#[diesel(table_name = proposals, primary_key(event_digest))]
127pub struct Proposals {
128 pub event_digest: String,
129 pub digest: String,
130 pub sender: String,
131 pub checkpoint: i64,
132 pub checkpoint_timestamp_ms: i64,
133 pub package: String,
134 pub pool_id: String,
135 pub balance_manager_id: String,
136 pub epoch: i64,
137 pub taker_fee: i64,
138 pub maker_fee: i64,
139 pub stake_required: i64,
140}
141
142#[derive(Queryable, Selectable, Insertable, Identifiable, Debug)]
143#[diesel(table_name = rebates, primary_key(event_digest))]
144pub struct Rebates {
145 pub event_digest: String,
146 pub digest: String,
147 pub sender: String,
148 pub checkpoint: i64,
149 pub checkpoint_timestamp_ms: i64,
150 pub package: String,
151 pub pool_id: String,
152 pub balance_manager_id: String,
153 pub epoch: i64,
154 pub claim_amount: i64,
155}
156
157#[derive(Queryable, Selectable, Insertable, Identifiable, Debug)]
158#[diesel(table_name = stakes, primary_key(event_digest))]
159pub struct Stakes {
160 pub event_digest: String,
161 pub digest: String,
162 pub sender: String,
163 pub checkpoint: i64,
164 pub checkpoint_timestamp_ms: i64,
165 pub package: String,
166 pub pool_id: String,
167 pub balance_manager_id: String,
168 pub epoch: i64,
169 pub amount: i64,
170 pub stake: bool,
171}
172
173#[derive(Queryable, Selectable, Insertable, Identifiable, Debug)]
174#[diesel(table_name = trade_params_update, primary_key(event_digest))]
175pub struct TradeParamsUpdate {
176 pub event_digest: String,
177 pub digest: String,
178 pub sender: String,
179 pub checkpoint: i64,
180 pub checkpoint_timestamp_ms: i64,
181 pub package: String,
182 pub pool_id: String,
183 pub taker_fee: i64,
184 pub maker_fee: i64,
185 pub stake_required: i64,
186}
187
188#[derive(Queryable, Selectable, Insertable, Identifiable, Debug)]
189#[diesel(table_name = votes, primary_key(event_digest))]
190pub struct Votes {
191 pub event_digest: String,
192 pub digest: String,
193 pub sender: String,
194 pub checkpoint: i64,
195 pub checkpoint_timestamp_ms: i64,
196 pub package: String,
197 pub pool_id: String,
198 pub balance_manager_id: String,
199 pub epoch: i64,
200 pub from_proposal_id: Option<String>,
201 pub to_proposal_id: String,
202 pub stake: i64,
203}
204
205#[derive(Queryable, Selectable, Insertable, Identifiable, Debug, Serialize)]
206#[diesel(table_name = pools, primary_key(pool_id))]
207pub struct Pools {
208 pub pool_id: String,
209 pub pool_name: String,
210 pub base_asset_id: String,
211 pub base_asset_decimals: i16,
212 pub base_asset_symbol: String,
213 pub base_asset_name: String,
214 pub quote_asset_id: String,
215 pub quote_asset_decimals: i16,
216 pub quote_asset_symbol: String,
217 pub quote_asset_name: String,
218 pub min_size: i32,
219 pub lot_size: i32,
220 pub tick_size: i32,
221}
222
223#[derive(Queryable, Selectable, Insertable, Identifiable, Debug)]
224#[diesel(table_name = sui_error_transactions, primary_key(txn_digest))]
225pub struct SuiErrorTransactions {
226 pub txn_digest: String,
227 pub sender_address: String,
228 pub timestamp_ms: i64,
229 pub failure_status: String,
230 pub package: String,
231 pub cmd_idx: Option<i64>,
232}
233
234#[derive(Queryable, Selectable, Insertable, Identifiable, Debug)]
235#[diesel(table_name = progress_store, primary_key(task_name))]
236pub struct ProgressStore {
237 pub task_name: String,
238 pub checkpoint: i64,
239 pub target_checkpoint: i64,
240 pub timestamp: Option<PgTimestamp>,
241}
242
243impl From<ProgressStore> for Task {
244 fn from(value: ProgressStore) -> Self {
245 Self {
246 task_name: value.task_name,
247 start_checkpoint: value.checkpoint as u64,
248 target_checkpoint: value.target_checkpoint as u64,
249 timestamp: value.timestamp.expect("Timestamp not set").0 as u64,
251 is_live_task: value.target_checkpoint == LIVE_TASK_TARGET_CHECKPOINT,
252 }
253 }
254}