summaryrefslogtreecommitdiff
path: root/backend/src/queries/category_balances
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2024-09-17 11:28:56 +0100
committerJoe Carstairs <me@joeac.net>2024-09-17 11:28:56 +0100
commitf0e3e0cfb183253e03b1a61ddecb7b9330d47fdb (patch)
tree722eca369743dcfbb95f1efd58cc4cecc0fb8677 /backend/src/queries/category_balances
parentc737b6df94eae4981bb03dda3583e24046e24865 (diff)
Refactors backend
Diffstat (limited to 'backend/src/queries/category_balances')
-rw-r--r--backend/src/queries/category_balances/get_all.rs43
-rw-r--r--backend/src/queries/category_balances/mod.rs3
2 files changed, 46 insertions, 0 deletions
diff --git a/backend/src/queries/category_balances/get_all.rs b/backend/src/queries/category_balances/get_all.rs
new file mode 100644
index 0000000..713fbeb
--- /dev/null
+++ b/backend/src/queries/category_balances/get_all.rs
@@ -0,0 +1,43 @@
+use crate::{
+ models::category_balance::CategoryBalance,
+ queries::{
+ budget_updates::get_all_budget_updates,
+ categories::get_all_categories,
+ 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,
+};
+use diesel::{result::Error, SqliteConnection};
+
+pub fn get_all_category_balances(
+ connection: &mut SqliteConnection,
+) -> Result<Vec<CategoryBalance>, Error> {
+ 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)
+}
diff --git a/backend/src/queries/category_balances/mod.rs b/backend/src/queries/category_balances/mod.rs
new file mode 100644
index 0000000..3fc1be2
--- /dev/null
+++ b/backend/src/queries/category_balances/mod.rs
@@ -0,0 +1,3 @@
+mod get_all;
+
+pub use get_all::get_all_category_balances;