diff options
Diffstat (limited to 'backend/src/queries/category_budgets')
| -rw-r--r-- | backend/src/queries/category_budgets/get_all.rs | 42 | ||||
| -rw-r--r-- | backend/src/queries/category_budgets/mod.rs | 3 |
2 files changed, 45 insertions, 0 deletions
diff --git a/backend/src/queries/category_budgets/get_all.rs b/backend/src/queries/category_budgets/get_all.rs new file mode 100644 index 0000000..6a8b040 --- /dev/null +++ b/backend/src/queries/category_budgets/get_all.rs @@ -0,0 +1,42 @@ +use crate::{ + models::{budget::Budget, category_budget::CategoryBudget}, + queries::{ + budget_updates::{ + get_first_budget_update_with_date, get_most_recent_budget_update_date_with_category_id, + }, + categories::get_all_category_ids, + }, +}; +use diesel::{result::Error, SqliteConnection}; + +pub fn get_all_category_budgets( + connection: &mut SqliteConnection, +) -> Result<Vec<CategoryBudget>, Error> { + 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)?; + + if most_recent_budget_update_date.is_none() { + budgets.push(CategoryBudget { + category_id, + budget: Option::None, + }); + continue; + } + + let most_recent_budget_update = get_first_budget_update_with_date( + most_recent_budget_update_date.unwrap().as_str(), + connection, + )?; + + budgets.push(CategoryBudget { + category_id, + budget: Some(Budget::from(&most_recent_budget_update)), + }); + } + + Ok(budgets) +} diff --git a/backend/src/queries/category_budgets/mod.rs b/backend/src/queries/category_budgets/mod.rs new file mode 100644 index 0000000..1a46cc3 --- /dev/null +++ b/backend/src/queries/category_budgets/mod.rs @@ -0,0 +1,3 @@ +mod get_all; + +pub use self::get_all::get_all_category_budgets; |
