summaryrefslogtreecommitdiff
path: root/actualbudget_queries/src/actualbudget_transactions.rs
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2024-12-12 08:28:04 +0000
committerJoe Carstairs <me@joeac.net>2024-12-12 08:28:04 +0000
commit54894f9de9bad4fecb2a116d59a03cdd003f84c0 (patch)
tree6ce5517cecf23d4e93d7a381a374e1fa6c810cee /actualbudget_queries/src/actualbudget_transactions.rs
parent8a30bcbdf9264d235bf93da3df8e170cfde53d02 (diff)
Moves rust workspace to root
Diffstat (limited to 'actualbudget_queries/src/actualbudget_transactions.rs')
-rw-r--r--actualbudget_queries/src/actualbudget_transactions.rs23
1 files changed, 23 insertions, 0 deletions
diff --git a/actualbudget_queries/src/actualbudget_transactions.rs b/actualbudget_queries/src/actualbudget_transactions.rs
new file mode 100644
index 0000000..4dc38e8
--- /dev/null
+++ b/actualbudget_queries/src/actualbudget_transactions.rs
@@ -0,0 +1,23 @@
+use actualbudget_models::{ActualbudgetDate, ActualbudgetTransaction};
+use actualbudget_schema::actualbudget_schema::v_transactions::{
+ self as transactions_schema,
+ dsl::v_transactions as transactions_table,
+};
+use anyhow::{Context, Result};
+use diesel::{dsl::min, result::Error, QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection};
+
+pub fn get_all_actualbudget_transactions(connection: &mut SqliteConnection) -> Result<Vec<ActualbudgetTransaction>> {
+ let actualbudget_transactions = transactions_table
+ .select(ActualbudgetTransaction::as_select())
+ .load(connection)
+ .with_context(|| "failed to get all Actualbudget transactions")?;
+ Ok(actualbudget_transactions)
+}
+
+pub fn get_first_actualbudget_transaction_date(connection: &mut SqliteConnection) -> Result<ActualbudgetDate> {
+ let date_as_int = transactions_table
+ .select(min(transactions_schema::date))
+ .first::<Option<i32>>(connection)
+ .map_or_else(|e| Err(e), |o| o.map_or_else(|| Err(Error::NotFound), |i| Ok(i)))?;
+ Ok(ActualbudgetDate::from_i32(date_as_int))
+}