1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
use bon::Builder;
use chrono::{DateTime, Utc};
use diesel::{Insertable, Queryable, Selectable};
use pgvector::Vector;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
use crate::{models::accounts::BankAccount, utils};
#[derive(Debug, Deserialize, PartialEq, Queryable, Selectable, Serialize, ToSchema)]
#[diesel(table_name = crate::schema::transactions)]
#[diesel(check_for_backend(diesel::pg::Pg))]
pub struct LinkedTransaction {
pub bank_account_id: i32,
pub id: i32,
pub description: String,
pub amount: f32,
pub posted_at: DateTime<Utc>,
}
#[derive(Insertable)]
#[diesel(table_name = crate::schema::transactions)]
#[diesel(check_for_backend(diesel::pg::Pg))]
pub struct NewLinkedTransaction {
pub bank_account_id: i32,
pub description: String,
pub amount: f32,
pub embedding: Vector,
pub posted_at: Option<DateTime<Utc>>,
}
#[derive(Debug, Deserialize, PartialEq, Queryable, Selectable, Serialize, ToSchema)]
#[diesel(table_name = crate::schema::transactions)]
#[diesel(check_for_backend(diesel::pg::Pg))]
pub struct Transaction {
pub id: i32,
pub description: String,
pub amount: f32,
pub posted_at: DateTime<Utc>,
}
#[derive(Builder, Deserialize, JsonSchema, Serialize, ToSchema)]
pub struct TransactionSearchParams {
/// Select a bank account using its database-generated IDs rather than
/// searching for it first.
#[serde(skip)]
pub bank_account_id: Option<i32>,
/// Select transactions using their database-generated IDs rather than searching
/// for them.
pub ids: Option<Vec<i32>>,
/// User query string to compare embeddings against. Basically,
/// if the user is asking something like "what color is my jacket?",
/// then the query string should be something like "jacket color" or
/// the user's original question. This can be left empty to ignore
/// similarity search in cases where the user wants to filter by
/// other means or get all items.
pub query: Option<String>,
/// Whether to match the query string more closely using a reranking -based
/// approach. `true` is useful for cases where the user is looking to match
/// to specific words or phrases, whereas `false` is useful for more broad
/// matching.
pub use_reranking_filter: Option<bool>,
/// Filter on transactions posted after this ISO formatted datetime.
pub posted_from: Option<DateTime<Utc>>,
/// Filter on transactions posted before this ISO formatted datetime.
pub posted_to: Option<DateTime<Utc>>,
/// How to order results for retrieved transactions.
pub order_by: Option<utils::OrderBy>,
/// Limit the max number of transactions to return from the search.
pub limit: Option<i64>,
}
#[derive(Builder, Deserialize, JsonSchema, Serialize, ToSchema)]
pub struct NewBankAccountTransactionRequest {
/// Select a bank account using its database-generated IDs rather than
/// searching for it first.
pub bank_account_id: Option<i32>,
/// User query string to compare embeddings against. Basically,
/// if the user is asking something like "what color is my jacket?",
/// then the query string should be something like "jacket color" or
/// the user's original question.
/// This can be left empty or null to ignore similarity search
/// in cases where the user wants to filter by other params
/// (e.g., get items by date or get all items).
pub bank_account_query: Option<String>,
/// Whether to match the query string more closely using a reranking -based
/// approach. `true` is useful for cases where the user is looking to match
/// to a specific phrase, name, or words.
pub bank_account_use_reranking_filter: Option<bool>,
/// Filter on bank accounts created after this ISO formatted datetime.
pub bank_account_created_from: Option<DateTime<Utc>>,
/// Filter on bank accounts created before this ISO formatted datetime.
pub bank_account_created_to: Option<DateTime<Utc>>,
/// How to order results for retrieved bank accounts.
pub bank_account_order_by: Option<utils::OrderBy>,
/// New transaction description.
pub transaction_description: String,
/// Transaction amount.
pub transaction_amount: f32,
/// Time the transaction was made/posted in ISO format.
pub transaction_posted_at: Option<DateTime<Utc>>,
}
#[derive(Debug, Deserialize, PartialEq, Serialize, ToSchema)]
pub struct BankAccountHistory {
/// Matching bank account.
pub bank_account: BankAccount,
/// Matching transactions.
pub transactions: Vec<Transaction>,
}
#[derive(Debug, Deserialize, PartialEq, Serialize, ToSchema)]
pub struct BankAccountTransaction {
/// Matching bank account.
pub bank_account: BankAccount,
/// New transaction.
pub transaction: Transaction,
}
#[derive(Builder, Deserialize, JsonSchema, Serialize, ToSchema)]
pub struct BankAccountTransactionSearchParams {
/// Select a bank account using its database-generated IDs rather than
/// searching for it first.
pub bank_account_id: Option<i32>,
/// User query string to compare embeddings against. Basically,
/// if the user is asking something like "what color is my jacket?",
/// then the query string should be something like "jacket color" or
/// the user's original question.
/// This can be left empty or null to ignore similarity search
/// in cases where the user wants to filter by other params
/// (e.g., get items by date or get all items).
pub bank_account_query: Option<String>,
/// Whether to match the query string more closely using a reranking -based
/// approach. `true` is useful for cases where the user is looking to match
/// to a specific phrase, name, or words.
pub bank_account_use_reranking_filter: Option<bool>,
/// Filter on bank accounts created after this ISO formatted datetime.
pub bank_account_created_from: Option<DateTime<Utc>>,
/// Filter on bank accounts created before this ISO formatted datetime.
pub bank_account_created_to: Option<DateTime<Utc>>,
/// How to order results for retrieved bank accounts.
pub bank_account_order_by: Option<utils::OrderBy>,
/// Search transactions using their database-generated IDs rather than
/// searching for them first.
pub transaction_ids: Option<Vec<i32>>,
/// User query string to compare embeddings against. Basically,
/// if the user is asking something like "what color is my jacket?",
/// then the query string should be something like "jacket color" or
/// the user's original question.
/// This can be left empty or null to ignore similarity search
/// in cases where the user wants to filter by other params
/// (e.g., get items by date or get all items).
pub transaction_query: Option<String>,
/// Whether to match the query string more closely using a reranking -based
/// approach. `true` is useful for cases where the user is looking to match
/// to a specific phrase, name, or words.
pub transaction_use_reranking_filter: Option<bool>,
/// Filter on transactions created after this ISO formatted datetime.
pub transaction_posted_from: Option<DateTime<Utc>>,
/// Filter on transactions created before this ISO formatted datetime.
pub transaction_posted_to: Option<DateTime<Utc>>,
/// How to order results for retrieved transactions.
pub transaction_order_by: Option<utils::OrderBy>,
/// Limit the max number of transactions to return from the search.
pub transaction_limit: Option<i64>,
}