diff options
| author | Joe Carstairs <me@joeac.net> | 2024-11-24 15:45:04 +0000 |
|---|---|---|
| committer | Joe Carstairs <me@joeac.net> | 2024-11-24 15:56:01 +0000 |
| commit | 1f5dcf9762a83d5972c0c8dbad22732505bf621c (patch) | |
| tree | 5a1f5edd993733d48016ce2a8a8691b8f446858a /rust/schist_queries/src/categories.rs | |
| parent | 022795ffcaaa0d904c9f911d8a059885c2254278 (diff) | |
Swaps budget updates for budget drips
Diffstat (limited to 'rust/schist_queries/src/categories.rs')
| -rw-r--r-- | rust/schist_queries/src/categories.rs | 108 |
1 files changed, 1 insertions, 107 deletions
diff --git a/rust/schist_queries/src/categories.rs b/rust/schist_queries/src/categories.rs index f54373c..f4a9747 100644 --- a/rust/schist_queries/src/categories.rs +++ b/rust/schist_queries/src/categories.rs @@ -1,22 +1,8 @@ use anyhow::{Context, Result}; use diesel::{QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; -use schist_models::{budget::Budget, category::Category, category_balance::CategoryBalance, category_budget::CategoryBudget, date_utc::DateUtc}; +use schist_models::category::Category; use schist_schema::schema::categories::{self as categories_schema, dsl::categories as categories_table}; -use crate::{ - budget_updates::{ - get_all_budget_updates, - get_first_budget_update_with_date_and_category_id, - get_most_recent_budget_update_date_with_category_id, - }, - category_transfers::{ - sum_category_transfer_quantity_per_from_category_id, - sum_category_transfer_quantity_per_to_category_id, - }, - transaction_categorisations::sum_transaction_categorisation_quantity_per_category_id, - utils::calculate_category_balance, -}; - pub fn delete_all_categories(connection: &mut SqliteConnection) -> Result<usize> { let num_rows_deleted = diesel::delete(categories_table) .execute(connection) @@ -32,42 +18,6 @@ pub fn get_all_categories(connection: &mut SqliteConnection) -> Result<Vec<Categ Ok(all_categories) } -pub fn get_all_category_balances( - connection: &mut SqliteConnection, -) -> Result<Vec<CategoryBalance>> { - get_all_category_balances_without_context(connection) - .with_context(|| "failed to get all category balances") -} - -fn get_all_category_balances_without_context( - connection: &mut SqliteConnection, -) -> Result<Vec<CategoryBalance>> { - let categories = get_all_categories(connection)?; - let transaction_sums = sum_transaction_categorisation_quantity_per_category_id(connection)?; - let category_transfer_from_sums = - sum_category_transfer_quantity_per_from_category_id(connection)?; - let category_transfer_to_sums = sum_category_transfer_quantity_per_to_category_id(connection)?; - let budget_updates = get_all_budget_updates(connection)?; - - let mut balances = Vec::<CategoryBalance>::new(); - for category in categories { - let balance = calculate_category_balance( - &category, - &transaction_sums, - &category_transfer_from_sums, - &category_transfer_to_sums, - &budget_updates, - )?; - - balances.push(CategoryBalance { - category_id: category.id, - balance: balance.try_into().unwrap(), - }) - } - - Ok(balances) -} - pub fn get_all_category_ids(connection: &mut SqliteConnection) -> Result<Vec<i32>> { let all_category_ids = categories_table .select(categories_schema::id) @@ -76,62 +26,6 @@ pub fn get_all_category_ids(connection: &mut SqliteConnection) -> Result<Vec<i32 Ok(all_category_ids) } -pub fn get_most_recent_category_budget_per_category_id( - connection: &mut SqliteConnection, -) -> Result<Vec<CategoryBudget>> { - get_most_recent_category_budget_per_category_id_without_context(connection) - .with_context(|| "failed to get most recent category budget per category ID") -} - -fn get_most_recent_category_budget_per_category_id_without_context( - connection: &mut SqliteConnection, -) -> Result<Vec<CategoryBudget>> { - let category_ids: Vec<i32> = get_all_category_ids(connection)?; - - let mut budgets = Vec::<CategoryBudget>::new(); - for category_id in category_ids { - let most_recent_budget_update_date = - get_most_recent_budget_update_date_with_category_id(category_id, connection)?; - - budgets.push(match most_recent_budget_update_date { - None => CategoryBudget { - category_id, - budget: Option::None, - }, - Some(most_recent_budget_update_date) => - get_most_recent_category_budget_with_date_and_category_id( - &most_recent_budget_update_date, - category_id, - connection, - )?, - }) - } - - Ok(budgets) -} - -fn get_most_recent_category_budget_with_date_and_category_id( - most_recent_budget_update_date: &DateUtc, - category_id: i32, - connection: &mut SqliteConnection -) -> Result<CategoryBudget> { - let most_recent_budget_update = get_first_budget_update_with_date_and_category_id( - &most_recent_budget_update_date, - category_id, - connection, - )?; - - let budget = match most_recent_budget_update { - None => None, - Some(most_recent_budget_update) => Some(Budget::from(&most_recent_budget_update)), - }; - - Ok(CategoryBudget { - category_id, - budget, - }) -} - pub fn insert_categories( categories: &[Category], connection: &mut SqliteConnection, |
