diff options
Diffstat (limited to 'rust/actualbudget_queries')
| -rw-r--r-- | rust/actualbudget_queries/Cargo.toml | 10 | ||||
| -rw-r--r-- | rust/actualbudget_queries/src/actualbudget_accounts.rs | 25 | ||||
| -rw-r--r-- | rust/actualbudget_queries/src/actualbudget_categories.rs | 7 | ||||
| -rw-r--r-- | rust/actualbudget_queries/src/actualbudget_transactions.rs | 23 | ||||
| -rw-r--r-- | rust/actualbudget_queries/src/actualbudget_zero_budgets.rs | 12 | ||||
| -rw-r--r-- | rust/actualbudget_queries/src/lib.rs | 4 |
6 files changed, 81 insertions, 0 deletions
diff --git a/rust/actualbudget_queries/Cargo.toml b/rust/actualbudget_queries/Cargo.toml new file mode 100644 index 0000000..6108461 --- /dev/null +++ b/rust/actualbudget_queries/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "actualbudget_queries" +version = "0.1.0" +edition = "2021" + +[dependencies] +actualbudget_models = { path = "../actualbudget_models" } +actualbudget_schema = { path = "../actualbudget_schema" } +anyhow = { workspace = true } +diesel = { workspace = true } diff --git a/rust/actualbudget_queries/src/actualbudget_accounts.rs b/rust/actualbudget_queries/src/actualbudget_accounts.rs new file mode 100644 index 0000000..1d8843d --- /dev/null +++ b/rust/actualbudget_queries/src/actualbudget_accounts.rs @@ -0,0 +1,25 @@ +use actualbudget_models::actualbudget_account::ActualbudgetAccount; +use actualbudget_schema::actualbudget_schema::accounts::{ + self as accounts_schema, + dsl::accounts as accounts_table, +}; +use anyhow::{Context, Result}; +use diesel::{ExpressionMethods, OptionalExtension, QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; + +pub fn get_all_actualbudget_accounts(connection: &mut SqliteConnection) -> Result<Vec<ActualbudgetAccount>> { + let actualbudget_accounts = accounts_table + .select(ActualbudgetAccount::as_select()) + .load(connection) + .with_context(|| "failed to get all Actualbudget accounts")?; + Ok(actualbudget_accounts) +} + +pub fn get_category_transfers_account(connection: &mut SqliteConnection) -> Result<Option<ActualbudgetAccount>> { + let category_transfers_account = accounts_table + .filter(accounts_schema::name.eq("Category transfers")) + .select(ActualbudgetAccount::as_select()) + .first(connection) + .optional() + .with_context(|| "failed to get Category Transfers account")?; + Ok(category_transfers_account) +} diff --git a/rust/actualbudget_queries/src/actualbudget_categories.rs b/rust/actualbudget_queries/src/actualbudget_categories.rs new file mode 100644 index 0000000..5f33e1e --- /dev/null +++ b/rust/actualbudget_queries/src/actualbudget_categories.rs @@ -0,0 +1,7 @@ +use actualbudget_models::actualbudget_category::ActualbudgetCategory; +use actualbudget_schema::actualbudget_schema::categories::dsl::categories; +use diesel::{result::Error, QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; + +pub fn get_all_actualbudget_categories(connection: &mut SqliteConnection) -> Result<Vec<ActualbudgetCategory>, Error> { + categories.select(ActualbudgetCategory::as_select()).load(connection) +} diff --git a/rust/actualbudget_queries/src/actualbudget_transactions.rs b/rust/actualbudget_queries/src/actualbudget_transactions.rs new file mode 100644 index 0000000..44d3730 --- /dev/null +++ b/rust/actualbudget_queries/src/actualbudget_transactions.rs @@ -0,0 +1,23 @@ +use actualbudget_models::{actualbudget_date::ActualbudgetDate, actualbudget_transaction::ActualbudgetTransaction}; +use actualbudget_schema::actualbudget_schema::transactions::{ + self as transactions_schema, + dsl::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)) +} diff --git a/rust/actualbudget_queries/src/actualbudget_zero_budgets.rs b/rust/actualbudget_queries/src/actualbudget_zero_budgets.rs new file mode 100644 index 0000000..187fe8d --- /dev/null +++ b/rust/actualbudget_queries/src/actualbudget_zero_budgets.rs @@ -0,0 +1,12 @@ +use anyhow::{Context, Result}; +use actualbudget_models::actualbudget_zero_budget::ActualbudgetZeroBudget; +use actualbudget_schema::actualbudget_schema::zero_budgets::dsl::zero_budgets as zero_budgets_table; +use diesel::{QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; + +pub fn get_all_actualbudget_zero_budgets(connection: &mut SqliteConnection) -> Result<Vec<ActualbudgetZeroBudget>> { + let zero_budgets = zero_budgets_table + .select(ActualbudgetZeroBudget::as_select()) + .load(connection) + .with_context(|| "failed to get all Actualbudget zero budgets")?; + Ok(zero_budgets) +} diff --git a/rust/actualbudget_queries/src/lib.rs b/rust/actualbudget_queries/src/lib.rs new file mode 100644 index 0000000..e16dafc --- /dev/null +++ b/rust/actualbudget_queries/src/lib.rs @@ -0,0 +1,4 @@ +pub mod actualbudget_accounts; +pub mod actualbudget_categories; +pub mod actualbudget_transactions; +pub mod actualbudget_zero_budgets; |
