summaryrefslogtreecommitdiff
path: root/backend/app/src/queries/category_budgets
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2024-10-16 12:51:21 +0100
committerJoe Carstairs <me@joeac.net>2024-10-16 12:51:21 +0100
commit27b95c9186bd45edd4c982a7cc89cf69cf2c5d46 (patch)
treebf104ff9d64e601bfec5516eb51ef298f3095e9b /backend/app/src/queries/category_budgets
parent76974785294089965efc3f55b2a08d4089029c52 (diff)
All backend stuff lives in backend folder
Diffstat (limited to 'backend/app/src/queries/category_budgets')
-rw-r--r--backend/app/src/queries/category_budgets/get_most_recent_per_category_id.rs42
-rw-r--r--backend/app/src/queries/category_budgets/mod.rs3
2 files changed, 45 insertions, 0 deletions
diff --git a/backend/app/src/queries/category_budgets/get_most_recent_per_category_id.rs b/backend/app/src/queries/category_budgets/get_most_recent_per_category_id.rs
new file mode 100644
index 0000000..6b76efd
--- /dev/null
+++ b/backend/app/src/queries/category_budgets/get_most_recent_per_category_id.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_most_recent_category_budget_per_category_id(
+ 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/app/src/queries/category_budgets/mod.rs b/backend/app/src/queries/category_budgets/mod.rs
new file mode 100644
index 0000000..29fc246
--- /dev/null
+++ b/backend/app/src/queries/category_budgets/mod.rs
@@ -0,0 +1,3 @@
+mod get_most_recent_per_category_id;
+
+pub use self::get_most_recent_per_category_id::get_most_recent_category_budget_per_category_id;