diff options
| author | Joe Carstairs <me@joeac.net> | 2026-01-15 22:35:39 +0000 |
|---|---|---|
| committer | Joe Carstairs <me@joeac.net> | 2026-01-17 11:49:54 +0000 |
| commit | 2809e6a2ef3ea636f3de5873f6c874923b410400 (patch) | |
| tree | c018f557a34efcec5bdb3780be6fba898d37d074 /schist_core/schist_queries/src | |
| parent | 1056421dd45b7e9af6f63a95026cb069cfa34e29 (diff) | |
renames categories -> buckets, refactors category_transfers -> bucket_transactions
Diffstat (limited to 'schist_core/schist_queries/src')
| -rw-r--r-- | schist_core/schist_queries/src/bucket_transactions.rs | 65 | ||||
| -rw-r--r-- | schist_core/schist_queries/src/bucket_transfers.rs | 82 | ||||
| -rw-r--r-- | schist_core/schist_queries/src/clear.rs | 6 | ||||
| -rw-r--r-- | schist_core/schist_queries/src/lib.rs | 2 |
4 files changed, 70 insertions, 85 deletions
diff --git a/schist_core/schist_queries/src/bucket_transactions.rs b/schist_core/schist_queries/src/bucket_transactions.rs new file mode 100644 index 0000000..da06341 --- /dev/null +++ b/schist_core/schist_queries/src/bucket_transactions.rs @@ -0,0 +1,65 @@ +use anyhow::{Context, Result}; +use diesel::{dsl::sum, QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; +use schist_models::BucketTransaction; +use schist_schema::schema::bucket_transactions::{ + self as bucket_transactions_schema, dsl::bucket_transactions as bucket_transactions_table, +}; + +pub fn delete_all_bucket_transactions(connection: &mut SqliteConnection) -> Result<usize> { + let num_rows_deleted = diesel::delete(bucket_transactions_table) + .execute(connection) + .with_context(|| "failed to delete all bucket transactions")?; + Ok(num_rows_deleted) +} + +pub fn get_all_bucket_transactions( + connection: &mut SqliteConnection, +) -> Result<Vec<BucketTransaction>> { + let all_bucket_transactions = bucket_transactions_table + .select(BucketTransaction::as_select()) + .load(connection) + .with_context(|| "failed to get all bucket transactions")?; + Ok(all_bucket_transactions) +} + +pub fn insert_bucket_transactions( + bucket_transactions: &[BucketTransaction], + connection: &mut SqliteConnection, +) -> Result<usize> { + let num_rows_inserted = diesel::insert_into(bucket_transactions_table) + .values(bucket_transactions) + .execute(connection) + .with_context(|| insert_err_msg(&bucket_transactions))?; + Ok(num_rows_inserted) +} + +fn insert_err_msg(bucket_transactions: &[BucketTransaction]) -> String { + format!( + "failed to insert bucket transactions: [{}]", + bucket_transactions + .iter() + .map(|ct| ct.id.to_string()) + .collect::<Vec<String>>() + .join(", ") + ) +} + +pub fn sum_bucket_transaction_amount_per_bucket_id( + connection: &mut SqliteConnection, +) -> Result<Vec<(i32, i64)>> { + let sum = bucket_transactions_table + .group_by(bucket_transactions_schema::bucket_id) + .select(( + bucket_transactions_schema::bucket_id, + sum(bucket_transactions_schema::amount), + )) + .load::<(i32, Option<i64>)>(connection) + .map(|result| { + result + .iter() + .map(|sum| (sum.0, sum.1.unwrap_or(0))) + .collect() + }) + .with_context(|| "failed to sum bucket transaction amount per bucket ID")?; + Ok(sum) +} diff --git a/schist_core/schist_queries/src/bucket_transfers.rs b/schist_core/schist_queries/src/bucket_transfers.rs deleted file mode 100644 index 652c8e0..0000000 --- a/schist_core/schist_queries/src/bucket_transfers.rs +++ /dev/null @@ -1,82 +0,0 @@ -use anyhow::{Context, Result}; -use diesel::{dsl::sum, QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; -use schist_models::BucketTransfer; -use schist_schema::schema::bucket_transfers::{ - self as bucket_transfers_schema, dsl::bucket_transfers as bucket_transfers_table, -}; - -pub fn delete_all_bucket_transfers(connection: &mut SqliteConnection) -> Result<usize> { - let num_rows_deleted = diesel::delete(bucket_transfers_table) - .execute(connection) - .with_context(|| "failed to delete all bucket transfers")?; - Ok(num_rows_deleted) -} - -pub fn get_all_bucket_transfers(connection: &mut SqliteConnection) -> Result<Vec<BucketTransfer>> { - let all_bucket_transfers = bucket_transfers_table - .select(BucketTransfer::as_select()) - .load(connection) - .with_context(|| "failed to get all bucket transfers")?; - Ok(all_bucket_transfers) -} - -pub fn insert_bucket_transfers( - bucket_transfers: &[BucketTransfer], - connection: &mut SqliteConnection, -) -> Result<usize> { - let num_rows_inserted = diesel::insert_into(bucket_transfers_table) - .values(bucket_transfers) - .execute(connection) - .with_context(|| insert_err_msg(&bucket_transfers))?; - Ok(num_rows_inserted) -} - -fn insert_err_msg(bucket_transfers: &[BucketTransfer]) -> String { - format!( - "failed to insert bucket transfers: [{}]", - bucket_transfers - .iter() - .map(|ct| ct.id.to_string()) - .collect::<Vec<String>>() - .join(", ") - ) -} - -pub fn sum_bucket_transfer_quantity_per_from_bucket_id( - connection: &mut SqliteConnection, -) -> Result<Vec<(i32, i64)>> { - let sum = bucket_transfers_table - .group_by(bucket_transfers_schema::from_bucket_id) - .select(( - bucket_transfers_schema::from_bucket_id, - sum(bucket_transfers_schema::amount), - )) - .load::<(i32, Option<i64>)>(connection) - .map(|result| { - result - .iter() - .map(|sum| (sum.0, sum.1.unwrap_or(0))) - .collect() - }) - .with_context(|| "failed to sum bucket transfer quantity per from bucket ID")?; - Ok(sum) -} - -pub fn sum_bucket_transfer_quantity_per_to_bucket_id( - connection: &mut SqliteConnection, -) -> Result<Vec<(i32, i64)>> { - let sum = bucket_transfers_table - .group_by(bucket_transfers_schema::to_bucket_id) - .select(( - bucket_transfers_schema::to_bucket_id, - sum(bucket_transfers_schema::amount), - )) - .load::<(i32, Option<i64>)>(connection) - .map(|vec| { - vec.iter() - .map(|(id, sum)| (*id, sum.unwrap_or(0))) - .collect() - }) - .with_context(|| "failed to sum bucket transfer quantity per to bucket ID")?; - Ok(sum) -} diff --git a/schist_core/schist_queries/src/clear.rs b/schist_core/schist_queries/src/clear.rs index a5a82f3..845e109 100644 --- a/schist_core/schist_queries/src/clear.rs +++ b/schist_core/schist_queries/src/clear.rs @@ -2,7 +2,9 @@ use anyhow::Result; use diesel::SqliteConnection; use crate::{ - account_transfers::delete_all_account_transfers, accounts::delete_all_accounts, bucket_transfers::delete_all_bucket_transfers, buckets::delete_all_buckets, drips::delete_all_drips, pipes::delete_all_pipes, transactions::delete_all_transactions + account_transfers::delete_all_account_transfers, accounts::delete_all_accounts, + bucket_transactions::delete_all_bucket_transactions, buckets::delete_all_buckets, + drips::delete_all_drips, pipes::delete_all_pipes, transactions::delete_all_transactions, }; pub fn clear(connection: &mut SqliteConnection) -> Result<()> { @@ -11,7 +13,7 @@ pub fn clear(connection: &mut SqliteConnection) -> Result<()> { delete_all_pipes(connection)?; delete_all_transactions(connection)?; delete_all_accounts(connection)?; - delete_all_bucket_transfers(connection)?; + delete_all_bucket_transactions(connection)?; delete_all_buckets(connection)?; Ok(()) } diff --git a/schist_core/schist_queries/src/lib.rs b/schist_core/schist_queries/src/lib.rs index ccd558d..ee74d6b 100644 --- a/schist_core/schist_queries/src/lib.rs +++ b/schist_core/schist_queries/src/lib.rs @@ -1,6 +1,6 @@ pub mod account_transfers; pub mod accounts; -pub mod bucket_transfers; +pub mod bucket_transactions; pub mod buckets; pub mod clear; pub mod drips; |
