From 7adaace61a4fe983eba5ded3aaaf624ce6fb9014 Mon Sep 17 00:00:00 2001 From: Joe Carstairs Date: Wed, 16 Oct 2024 18:22:55 +0100 Subject: Refactors some backend stuff to core lib --- .../app/2024-08-31-084439_initial_setup/down.sql | 6 - backend/app/2024-08-31-084439_initial_setup/up.sql | 70 ----------- backend/app/Cargo.lock | 10 ++ backend/app/Cargo.toml | 2 +- backend/app/Rocket.toml | 2 +- backend/app/src/main.rs | 6 +- backend/app/src/models/account.rs | 15 --- backend/app/src/models/budget.rs | 44 ------- backend/app/src/models/budget_update.rs | 17 --- backend/app/src/models/category.rs | 9 -- backend/app/src/models/category_balance.rs | 7 -- backend/app/src/models/category_budget.rs | 9 -- backend/app/src/models/category_transfer.rs | 11 -- backend/app/src/models/date_time_utc.rs | 131 --------------------- backend/app/src/models/mod.rs | 10 -- backend/app/src/models/transaction.rs | 17 --- .../app/src/models/transaction_categorisation.rs | 11 -- backend/app/src/queries/accounts/get_all.rs | 3 +- backend/app/src/queries/accounts/insert.rs | 7 +- backend/app/src/queries/budget_updates/get_all.rs | 2 +- .../queries/budget_updates/get_first_with_date.rs | 2 +- .../get_most_recent_with_category_id.rs | 2 +- backend/app/src/queries/categories/get_all.rs | 2 +- backend/app/src/queries/categories/get_all_ids.rs | 2 +- .../app/src/queries/category_balances/get_all.rs | 2 +- .../get_most_recent_per_category_id.rs | 12 +- .../sum_quantity_per_from_category_id.rs | 8 +- .../sum_quantity_per_to_category_id.rs | 8 +- .../sum_quantity_per_category_id.rs | 2 +- .../sum_quantity_per_to_category_id.rs | 0 backend/app/src/routes/account.rs | 6 +- backend/app/src/routes/balance.rs | 3 +- backend/app/src/routes/budget.rs | 2 +- backend/app/src/routes/budget_update.rs | 2 +- backend/app/src/routes/category.rs | 2 +- backend/app/src/schema.rs | 72 ----------- backend/app/src/utils/calculate_budgets_accrual.rs | 11 +- .../app/src/utils/calculate_category_balance.rs | 11 +- 38 files changed, 59 insertions(+), 479 deletions(-) delete mode 100644 backend/app/2024-08-31-084439_initial_setup/down.sql delete mode 100644 backend/app/2024-08-31-084439_initial_setup/up.sql delete mode 100644 backend/app/src/models/account.rs delete mode 100644 backend/app/src/models/budget.rs delete mode 100644 backend/app/src/models/budget_update.rs delete mode 100644 backend/app/src/models/category.rs delete mode 100644 backend/app/src/models/category_balance.rs delete mode 100644 backend/app/src/models/category_budget.rs delete mode 100644 backend/app/src/models/category_transfer.rs delete mode 100644 backend/app/src/models/date_time_utc.rs delete mode 100644 backend/app/src/models/mod.rs delete mode 100644 backend/app/src/models/transaction.rs delete mode 100644 backend/app/src/models/transaction_categorisation.rs delete mode 100644 backend/app/src/queries/transaction_categorisations/sum_quantity_per_to_category_id.rs delete mode 100644 backend/app/src/schema.rs (limited to 'backend/app') diff --git a/backend/app/2024-08-31-084439_initial_setup/down.sql b/backend/app/2024-08-31-084439_initial_setup/down.sql deleted file mode 100644 index 8cf4b1e..0000000 --- a/backend/app/2024-08-31-084439_initial_setup/down.sql +++ /dev/null @@ -1,6 +0,0 @@ -DROP TABLE accounts; -DROP TABLE budget_updates; -DROP TABLE categories; -DROP TABLE transaction_categorisations; -DROP TABLE category_transfers; -DROP TABLE transactions; diff --git a/backend/app/2024-08-31-084439_initial_setup/up.sql b/backend/app/2024-08-31-084439_initial_setup/up.sql deleted file mode 100644 index 3584ae7..0000000 --- a/backend/app/2024-08-31-084439_initial_setup/up.sql +++ /dev/null @@ -1,70 +0,0 @@ -PRAGMA foreign_keys = ON; - -CREATE TABLE accounts( - id INTEGER NOT NULL PRIMARY KEY, - name TEXT NOT NULL, - opening_balance INTEGER NOT NULL, - opening_date TEXT NOT NULL -); - -CREATE TABLE budget_updates( - id INTEGER NOT NULL PRIMARY KEY, - category_id INTEGER NOT NULL, - date TEXT NOT NULL, - new_budget INTEGER NOT NULL, - new_period INTEGER NOT NULL, - FOREIGN KEY (category_id) - REFERENCES categories (id) - ON UPDATE CASCADE - ON DELETE RESTRICT -); - -CREATE TABLE categories( - id INTEGER NOT NULL PRIMARY KEY, - name TEXT NOT NULL -); - -CREATE TABLE category_transfers( - id INTEGER NOT NULL PRIMARY KEY, - description TEXT NOT NULL, - quantity INTEGER NOT NULL, - from_category_id INTEGER NOT NULL, - to_category_id INTEGER NOT NULL, - FOREIGN KEY (from_category_id) - REFERENCES categories (id) - ON UPDATE CASCADE - ON DELETE RESTRICT, - FOREIGN KEY (to_category_id) - REFERENCES categories (id) - ON UPDATE CASCADE - ON DELETE RESTRICT -); - -CREATE TABLE transactions( - id INTEGER NOT NULL PRIMARY KEY, - description TEXT NOT NULL, - payee TEXT NOT NULL, - quantity INTEGER NOT NULL, - date TEXT NOT NULL, - account_id INTEGER NOT NULL, - FOREIGN KEY (account_id) - REFERENCES accounts (id) - ON UPDATE CASCADE - ON DELETE RESTRICT -); - -CREATE TABLE transaction_categorisations( - id INTEGER NOT NULL PRIMARY KEY, - description TEXT NOT NULL, - quantity INTEGER NOT NULL, - transaction_id INTEGER NOT NULL, - category_id INTEGER NOT NULL, - FOREIGN KEY (transaction_id) - REFERENCES transactions (id) - ON UPDATE CASCADE - ON DELETE RESTRICT, - FOREIGN KEY (category_id) - REFERENCES categories (id) - ON UPDATE CASCADE - ON DELETE RESTRICT -); diff --git a/backend/app/Cargo.lock b/backend/app/Cargo.lock index f453ebe..0f6e6d4 100644 --- a/backend/app/Cargo.lock +++ b/backend/app/Cargo.lock @@ -138,6 +138,7 @@ checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" name = "budgeting_app_backend" version = "0.1.0" dependencies = [ + "budgeting_app_core", "cfg-if", "chrono", "diesel", @@ -146,6 +147,15 @@ dependencies = [ "rocket", "rocket_sync_db_pools", "rusqlite", +] + +[[package]] +name = "budgeting_app_core" +version = "0.1.0" +dependencies = [ + "chrono", + "diesel", + "diesel_migrations", "serde", ] diff --git a/backend/app/Cargo.toml b/backend/app/Cargo.toml index af1c8ef..69e1ed1 100644 --- a/backend/app/Cargo.toml +++ b/backend/app/Cargo.toml @@ -4,6 +4,7 @@ version = "0.1.0" edition = "2021" [dependencies] +budgeting_app_core = { path = "../core" } chrono = { version = "0.4.38", features = ["serde"] } cfg-if = "1.0.0" diesel = { version = "2.2.0", features = ["sqlite"] } @@ -12,4 +13,3 @@ dotenvy = "0.15.7" rocket = { version = "0.5.1", features = ["json"] } rocket_sync_db_pools = { version = "0.1.0", features = ["diesel_sqlite_pool"] } rusqlite = { version = "0.32.1", features = ["bundled"] } -serde = "1.0.209" diff --git a/backend/app/Rocket.toml b/backend/app/Rocket.toml index bb43355..088d632 100644 --- a/backend/app/Rocket.toml +++ b/backend/app/Rocket.toml @@ -1,2 +1,2 @@ [global.databases] -user_data = { url = "/home/joeac/src/budgeting-app/backend/user_data.sqlite" } +user_data = { url = "/home/joeac/src/budgeting-app/backend/core/user_data.sqlite" } diff --git a/backend/app/src/main.rs b/backend/app/src/main.rs index c3e02e5..152f958 100644 --- a/backend/app/src/main.rs +++ b/backend/app/src/main.rs @@ -1,6 +1,6 @@ +use budgeting_app_core::MIGRATIONS; use diesel::SqliteConnection; use diesel_migrations::MigrationHarness; -use diesel_migrations::{embed_migrations, EmbeddedMigrations}; use rocket::fairing::AdHoc; use rocket::http::ContentType; use rocket::{launch, routes, Build, Rocket}; @@ -8,14 +8,10 @@ use rocket::{launch, routes, Build, Rocket}; use crate::databases::UserDataDb; pub mod databases; -pub mod models; pub mod queries; pub mod routes; -pub mod schema; pub mod utils; -pub const MIGRATIONS: EmbeddedMigrations = embed_migrations!("migrations"); - fn run_database_migrations(connection: &mut SqliteConnection) { connection .run_pending_migrations(MIGRATIONS) diff --git a/backend/app/src/models/account.rs b/backend/app/src/models/account.rs deleted file mode 100644 index c10bd5f..0000000 --- a/backend/app/src/models/account.rs +++ /dev/null @@ -1,15 +0,0 @@ -use diesel::prelude::*; -use serde::{Deserialize, Serialize}; - -use super::date_time_utc::DateTimeUtc; - -#[derive( - Insertable, Queryable, Identifiable, Selectable, Debug, PartialEq, Clone, Serialize, Deserialize, -)] -#[diesel(table_name = crate::schema::accounts)] -pub struct Account { - pub id: i32, - pub name: String, - pub opening_balance: i32, - pub opening_date: DateTimeUtc, -} diff --git a/backend/app/src/models/budget.rs b/backend/app/src/models/budget.rs deleted file mode 100644 index cc18f2e..0000000 --- a/backend/app/src/models/budget.rs +++ /dev/null @@ -1,44 +0,0 @@ -use serde::Serialize; - -use super::budget_update::BudgetUpdate; - -#[derive(Debug, Eq, PartialEq, Serialize)] -pub struct Budget { - pub quantity: i32, - pub period: i32, -} - -impl From<&BudgetUpdate> for Budget { - fn from(budget_update: &BudgetUpdate) -> Self { - Self { - quantity: budget_update.new_budget, - period: budget_update.new_period, - } - } -} - -#[cfg(test)] -mod test { - use chrono::Utc; - - use crate::models::date_time_utc::DateTimeUtc; - - use super::*; - - #[test] - fn when_from_budget_update_then_returns_budget() { - let quantity = 2; - let period = 3; - let budget_update = BudgetUpdate { - id: 0, - category_id: 1, - date: DateTimeUtc::new(Utc::now()), - new_budget: quantity, - new_period: period, - }; - - let budget = Budget::from(&budget_update); - - assert_eq!(budget, Budget { quantity, period }); - } -} diff --git a/backend/app/src/models/budget_update.rs b/backend/app/src/models/budget_update.rs deleted file mode 100644 index c63e957..0000000 --- a/backend/app/src/models/budget_update.rs +++ /dev/null @@ -1,17 +0,0 @@ -use diesel::prelude::*; -use serde::Serialize; - -use crate::models::category::Category; - -use super::date_time_utc::DateTimeUtc; - -#[derive(Clone, Serialize, Queryable, Identifiable, Selectable, Associations, Debug, PartialEq)] -#[diesel(table_name = crate::schema::budget_updates)] -#[diesel(belongs_to(Category))] -pub struct BudgetUpdate { - pub id: i32, - pub category_id: i32, - pub date: DateTimeUtc, - pub new_budget: i32, - pub new_period: i32, -} diff --git a/backend/app/src/models/category.rs b/backend/app/src/models/category.rs deleted file mode 100644 index 5cb2609..0000000 --- a/backend/app/src/models/category.rs +++ /dev/null @@ -1,9 +0,0 @@ -use diesel::prelude::*; -use serde::{Deserialize, Serialize}; - -#[derive(Queryable, Identifiable, Selectable, Debug, PartialEq, Serialize, Deserialize)] -#[diesel(table_name = crate::schema::categories)] -pub struct Category { - pub id: i32, - pub name: String, -} diff --git a/backend/app/src/models/category_balance.rs b/backend/app/src/models/category_balance.rs deleted file mode 100644 index 796b40b..0000000 --- a/backend/app/src/models/category_balance.rs +++ /dev/null @@ -1,7 +0,0 @@ -use serde::Serialize; - -#[derive(Serialize)] -pub struct CategoryBalance { - pub category_id: i32, - pub balance: i32, -} diff --git a/backend/app/src/models/category_budget.rs b/backend/app/src/models/category_budget.rs deleted file mode 100644 index 9796261..0000000 --- a/backend/app/src/models/category_budget.rs +++ /dev/null @@ -1,9 +0,0 @@ -use serde::Serialize; - -use super::budget::Budget; - -#[derive(Serialize)] -pub struct CategoryBudget { - pub category_id: i32, - pub budget: Option, -} diff --git a/backend/app/src/models/category_transfer.rs b/backend/app/src/models/category_transfer.rs deleted file mode 100644 index 6cbda0e..0000000 --- a/backend/app/src/models/category_transfer.rs +++ /dev/null @@ -1,11 +0,0 @@ -use diesel::prelude::*; - -#[derive(Queryable, Identifiable, Selectable, Debug, PartialEq)] -#[diesel(table_name = crate::schema::category_transfers)] -pub struct CategoryTransfer { - pub id: i32, - pub description: String, - pub quantity: i32, - pub from_category_id: i32, - pub to_category_id: i32, -} diff --git a/backend/app/src/models/date_time_utc.rs b/backend/app/src/models/date_time_utc.rs deleted file mode 100644 index 03d5802..0000000 --- a/backend/app/src/models/date_time_utc.rs +++ /dev/null @@ -1,131 +0,0 @@ -use chrono::{DateTime, Datelike, Utc}; -use diesel::{ - backend::Backend, - deserialize::{self, FromSql, FromSqlRow}, - expression::AsExpression, - serialize::{self, ToSql}, - sql_types::Text, - sqlite::Sqlite, -}; -use serde::{Deserialize, Serialize}; - -#[derive( - Eq, - PartialEq, - Ord, - PartialOrd, - Serialize, - Deserialize, - Copy, - Clone, - Debug, - AsExpression, - FromSqlRow, -)] -#[diesel(sql_type=Text)] -pub struct DateTimeUtc(DateTime); - -impl DateTimeUtc { - pub fn day_diff(&self, other: &DateTimeUtc) -> u32 { - self.0 - .num_days_from_ce() - .abs_diff(other.0.num_days_from_ce()) - } - - pub fn to_day_str(&self) -> String { - self.0 - .to_rfc3339() - .split_at_checked(10) - .map(|(day_str, _)| String::from(day_str)) - .unwrap_or_else(|| String::from("")) - } - - pub fn new(date_time_utc: DateTime) -> Self { - Self(date_time_utc) - } - - pub fn now() -> Self { - Self(Utc::now()) - } -} - -impl ToSql for DateTimeUtc { - fn to_sql<'b>( - &'b self, - out: &mut diesel::serialize::Output<'b, '_, Sqlite>, - ) -> serialize::Result { - out.set_value(self.to_day_str()); - Ok(diesel::serialize::IsNull::No) - } -} - -impl FromSql for DateTimeUtc { - fn from_sql(bytes: ::RawValue<'_>) -> deserialize::Result { - let str: String = FromSql::::from_sql(bytes)?; - let date_time = str.as_str().parse::>()?; - Ok(DateTimeUtc(date_time)) - } -} - -#[cfg(test)] -mod test { - use chrono::TimeZone; - - use super::*; - - #[test] - fn given_midnight_when_day_diff_next_midnight_less_1s_then_return_0() { - let start = DateTimeUtc::new(Utc.with_ymd_and_hms(2000, 1, 1, 0, 0, 0).unwrap().to_utc()); - let end = DateTimeUtc::new( - Utc.with_ymd_and_hms(2000, 1, 1, 23, 59, 59) - .unwrap() - .to_utc(), - ); - - let day_diff = start.day_diff(&end); - let neg_day_diff = end.day_diff(&start); - - assert_eq!(day_diff, 0); - assert_eq!(day_diff, neg_day_diff); - } - - #[test] - fn given_midnight_when_day_diff_next_midnight_then_return_1() { - let start = DateTimeUtc::new(Utc.with_ymd_and_hms(2000, 1, 1, 0, 0, 0).unwrap().to_utc()); - let end = DateTimeUtc::new(Utc.with_ymd_and_hms(2000, 1, 2, 0, 0, 0).unwrap().to_utc()); - - let day_diff = start.day_diff(&end); - let neg_day_diff = end.day_diff(&start); - - assert_eq!(day_diff, 1); - assert_eq!(day_diff, neg_day_diff); - } - - #[test] - fn given_midnight_less_1s_when_day_diff_midnight_then_return_1() { - let start = DateTimeUtc::new( - Utc.with_ymd_and_hms(2000, 1, 1, 23, 59, 59) - .unwrap() - .to_utc(), - ); - let end = DateTimeUtc::new(Utc.with_ymd_and_hms(2000, 1, 2, 0, 0, 0).unwrap().to_utc()); - - let day_diff = start.day_diff(&end); - let neg_day_diff = end.day_diff(&start); - - assert_eq!(day_diff, 1); - assert_eq!(day_diff, neg_day_diff); - } - - #[test] - fn given_23_nov_1970_when_to_day_str_then_return_iso_day_str() { - let date_time_utc = DateTimeUtc::new( - Utc.with_ymd_and_hms(1970, 11, 23, 0, 0, 0) - .unwrap() - .to_utc(), - ); - let day_str = date_time_utc.to_day_str(); - - assert_eq!(day_str, "1970-11-23"); - } -} diff --git a/backend/app/src/models/mod.rs b/backend/app/src/models/mod.rs deleted file mode 100644 index b790fcb..0000000 --- a/backend/app/src/models/mod.rs +++ /dev/null @@ -1,10 +0,0 @@ -pub mod account; -pub mod budget; -pub mod budget_update; -pub mod category; -pub mod category_balance; -pub mod category_budget; -pub mod category_transfer; -pub mod date_time_utc; -pub mod transaction; -pub mod transaction_categorisation; diff --git a/backend/app/src/models/transaction.rs b/backend/app/src/models/transaction.rs deleted file mode 100644 index 36f33f8..0000000 --- a/backend/app/src/models/transaction.rs +++ /dev/null @@ -1,17 +0,0 @@ -use diesel::prelude::*; - -use crate::models::account::Account; - -use super::date_time_utc::DateTimeUtc; - -#[derive(Queryable, Identifiable, Selectable, Associations, Debug, PartialEq)] -#[diesel(table_name = crate::schema::transactions)] -#[diesel(belongs_to(Account))] -pub struct Transaction { - pub id: i32, - pub description: String, - pub payee: String, - pub quantity: i32, - pub date: DateTimeUtc, - pub account_id: i32, -} diff --git a/backend/app/src/models/transaction_categorisation.rs b/backend/app/src/models/transaction_categorisation.rs deleted file mode 100644 index d2867f1..0000000 --- a/backend/app/src/models/transaction_categorisation.rs +++ /dev/null @@ -1,11 +0,0 @@ -use diesel::prelude::*; - -#[derive(Queryable, Identifiable, Selectable, Debug, PartialEq)] -#[diesel(table_name = crate::schema::transaction_categorisations)] -pub struct TransactionCategorisations { - pub id: i32, - pub description: String, - pub quantity: i32, - pub transaction_id: i32, - pub category_id: i32, -} diff --git a/backend/app/src/queries/accounts/get_all.rs b/backend/app/src/queries/accounts/get_all.rs index 12941ac..bc67f77 100644 --- a/backend/app/src/queries/accounts/get_all.rs +++ b/backend/app/src/queries/accounts/get_all.rs @@ -1,7 +1,6 @@ +use budgeting_app_core::{models::account::Account, schema::accounts::dsl::accounts}; use diesel::{result::Error, QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; -use crate::{models::account::Account, schema::accounts::dsl::accounts}; - pub fn get_all_accounts(connection: &mut SqliteConnection) -> Result, Error> { accounts.select(Account::as_select()).load(connection) } diff --git a/backend/app/src/queries/accounts/insert.rs b/backend/app/src/queries/accounts/insert.rs index c20cf60..1d1a323 100644 --- a/backend/app/src/queries/accounts/insert.rs +++ b/backend/app/src/queries/accounts/insert.rs @@ -1,9 +1,10 @@ +use budgeting_app_core::{ + models::account::Account, + schema::accounts::dsl::accounts as accounts_table, +}; use diesel::prelude::*; use diesel::result::Error; -use crate::models::account::Account; -use crate::schema::accounts::dsl::accounts as accounts_table; - pub fn insert_account( accounts: &[Account], connection: &mut SqliteConnection, diff --git a/backend/app/src/queries/budget_updates/get_all.rs b/backend/app/src/queries/budget_updates/get_all.rs index 97f2f2f..e6e4b59 100644 --- a/backend/app/src/queries/budget_updates/get_all.rs +++ b/backend/app/src/queries/budget_updates/get_all.rs @@ -1,4 +1,4 @@ -use crate::{ +use budgeting_app_core::{ models::budget_update::BudgetUpdate, schema::budget_updates::dsl::budget_updates as budget_updates_table, }; diff --git a/backend/app/src/queries/budget_updates/get_first_with_date.rs b/backend/app/src/queries/budget_updates/get_first_with_date.rs index a2824be..3856557 100644 --- a/backend/app/src/queries/budget_updates/get_first_with_date.rs +++ b/backend/app/src/queries/budget_updates/get_first_with_date.rs @@ -1,4 +1,4 @@ -use crate::{ +use budgeting_app_core::{ models::budget_update::BudgetUpdate, schema::budget_updates::{ self as budget_updates_schema, dsl::budget_updates as budget_updates_table, diff --git a/backend/app/src/queries/budget_updates/get_most_recent_with_category_id.rs b/backend/app/src/queries/budget_updates/get_most_recent_with_category_id.rs index 4753092..55012f5 100644 --- a/backend/app/src/queries/budget_updates/get_most_recent_with_category_id.rs +++ b/backend/app/src/queries/budget_updates/get_most_recent_with_category_id.rs @@ -1,4 +1,4 @@ -use crate::{ +use budgeting_app_core::{ models::date_time_utc::DateTimeUtc, schema::budget_updates::{ self as budget_updates_schema, dsl::budget_updates as budget_updates_table, diff --git a/backend/app/src/queries/categories/get_all.rs b/backend/app/src/queries/categories/get_all.rs index db5a073..b6ec756 100644 --- a/backend/app/src/queries/categories/get_all.rs +++ b/backend/app/src/queries/categories/get_all.rs @@ -1,4 +1,4 @@ -use crate::{models::category::Category, schema::categories::dsl::categories as categories_table}; +use budgeting_app_core::{models::category::Category, schema::categories::dsl::categories as categories_table}; use diesel::{result::Error, QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; pub fn get_all_categories(connection: &mut SqliteConnection) -> Result, Error> { diff --git a/backend/app/src/queries/categories/get_all_ids.rs b/backend/app/src/queries/categories/get_all_ids.rs index 7c7c912..48d5e57 100644 --- a/backend/app/src/queries/categories/get_all_ids.rs +++ b/backend/app/src/queries/categories/get_all_ids.rs @@ -1,4 +1,4 @@ -use crate::schema::categories::{self as categories_schema, dsl::categories as categories_table}; +use budgeting_app_core::schema::categories::{self as categories_schema, dsl::categories as categories_table}; use diesel::{result::Error, QueryDsl, RunQueryDsl, SqliteConnection}; pub fn get_all_category_ids(connection: &mut SqliteConnection) -> Result, Error> { diff --git a/backend/app/src/queries/category_balances/get_all.rs b/backend/app/src/queries/category_balances/get_all.rs index 713fbeb..7ee474a 100644 --- a/backend/app/src/queries/category_balances/get_all.rs +++ b/backend/app/src/queries/category_balances/get_all.rs @@ -1,5 +1,5 @@ +use budgeting_app_core::models::category_balance::CategoryBalance; use crate::{ - models::category_balance::CategoryBalance, queries::{ budget_updates::get_all_budget_updates, categories::get_all_categories, 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 index 6b76efd..b71a5fb 100644 --- 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 @@ -1,11 +1,9 @@ -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 budgeting_app_core::models::{budget::Budget, category_budget::CategoryBudget}; +use crate::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}; diff --git a/backend/app/src/queries/category_transfers/sum_quantity_per_from_category_id.rs b/backend/app/src/queries/category_transfers/sum_quantity_per_from_category_id.rs index ae3a51a..3c077aa 100644 --- a/backend/app/src/queries/category_transfers/sum_quantity_per_from_category_id.rs +++ b/backend/app/src/queries/category_transfers/sum_quantity_per_from_category_id.rs @@ -1,8 +1,8 @@ -use diesel::{dsl::sum, result::Error, QueryDsl, RunQueryDsl, SqliteConnection}; - -use crate::schema::category_transfers::{ - self as category_transfers_schema, dsl::category_transfers as category_transfers_table, +use budgeting_app_core::schema::category_transfers::{ + self as category_transfers_schema, + dsl::category_transfers as category_transfers_table, }; +use diesel::{dsl::sum, result::Error, QueryDsl, RunQueryDsl, SqliteConnection}; pub fn sum_category_transfer_quantity_per_from_category_id( connection: &mut SqliteConnection, diff --git a/backend/app/src/queries/category_transfers/sum_quantity_per_to_category_id.rs b/backend/app/src/queries/category_transfers/sum_quantity_per_to_category_id.rs index fe6f3a7..6e81d7d 100644 --- a/backend/app/src/queries/category_transfers/sum_quantity_per_to_category_id.rs +++ b/backend/app/src/queries/category_transfers/sum_quantity_per_to_category_id.rs @@ -1,8 +1,8 @@ -use diesel::{dsl::sum, result::Error, QueryDsl, RunQueryDsl, SqliteConnection}; - -use crate::schema::category_transfers::{ - self as category_transfers_schema, dsl::category_transfers as category_transfers_table, +use budgeting_app_core::schema::category_transfers::{ + self as category_transfers_schema, + dsl::category_transfers as category_transfers_table, }; +use diesel::{dsl::sum, result::Error, QueryDsl, RunQueryDsl, SqliteConnection}; pub fn sum_category_transfer_quantity_per_to_category_id( connection: &mut SqliteConnection, diff --git a/backend/app/src/queries/transaction_categorisations/sum_quantity_per_category_id.rs b/backend/app/src/queries/transaction_categorisations/sum_quantity_per_category_id.rs index 7f93e0c..90dc990 100644 --- a/backend/app/src/queries/transaction_categorisations/sum_quantity_per_category_id.rs +++ b/backend/app/src/queries/transaction_categorisations/sum_quantity_per_category_id.rs @@ -1,4 +1,4 @@ -use crate::schema::transaction_categorisations::{ +use budgeting_app_core::schema::transaction_categorisations::{ self as transaction_categorisations_schema, dsl::transaction_categorisations as transaction_categorisations_table, }; diff --git a/backend/app/src/queries/transaction_categorisations/sum_quantity_per_to_category_id.rs b/backend/app/src/queries/transaction_categorisations/sum_quantity_per_to_category_id.rs deleted file mode 100644 index e69de29..0000000 diff --git a/backend/app/src/routes/account.rs b/backend/app/src/routes/account.rs index 7bbdb4f..7c29233 100644 --- a/backend/app/src/routes/account.rs +++ b/backend/app/src/routes/account.rs @@ -1,19 +1,19 @@ +use budgeting_app_core::models::account::Account; use diesel::result::DatabaseErrorKind; use rocket::http::Status; use rocket::serde::json::Json; use rocket::{get, post, Responder}; use crate::databases::UserDataDb; -use crate::models::account::Account; use crate::queries::accounts::{get_all_accounts as get_all_accounts_query, insert_account}; #[get("/account")] -pub async fn get_all_accounts(user_data_db: UserDataDb) -> Result>, Status> { +pub async fn get_all_accounts(user_data_db: UserDataDb) -> Result>, (Status, String)> { user_data_db .run(get_all_accounts_query) .await .map(Json) - .map_err(|_| Status { code: 500 }) + .map_err(|err| (Status::InternalServerError, err.to_string())) } #[derive(Responder)] diff --git a/backend/app/src/routes/balance.rs b/backend/app/src/routes/balance.rs index f423c90..642aff1 100644 --- a/backend/app/src/routes/balance.rs +++ b/backend/app/src/routes/balance.rs @@ -1,7 +1,8 @@ +use budgeting_app_core::models::category_balance::CategoryBalance; use rocket::{get, http::Status, serde::json::Json}; use crate::{ - databases::UserDataDb, models::category_balance::CategoryBalance, + databases::UserDataDb, queries::category_balances::get_all_category_balances as get_all_category_balances_query, }; diff --git a/backend/app/src/routes/budget.rs b/backend/app/src/routes/budget.rs index 67aae8e..64b9e06 100644 --- a/backend/app/src/routes/budget.rs +++ b/backend/app/src/routes/budget.rs @@ -1,9 +1,9 @@ +use budgeting_app_core::models::category_budget::CategoryBudget; use rocket::get; use rocket::http::Status; use rocket::serde::json::Json; use crate::databases::UserDataDb; -use crate::models::category_budget::CategoryBudget; use crate::queries; #[get("/budget/category?current")] diff --git a/backend/app/src/routes/budget_update.rs b/backend/app/src/routes/budget_update.rs index 7732c7b..6def31a 100644 --- a/backend/app/src/routes/budget_update.rs +++ b/backend/app/src/routes/budget_update.rs @@ -1,9 +1,9 @@ +use budgeting_app_core::models::budget_update::BudgetUpdate; use rocket::get; use rocket::http::Status; use rocket::serde::json::Json; use crate::databases::UserDataDb; -use crate::models::budget_update::BudgetUpdate; use crate::queries; #[get("/budget-update")] diff --git a/backend/app/src/routes/category.rs b/backend/app/src/routes/category.rs index 01fd8d1..43810e9 100644 --- a/backend/app/src/routes/category.rs +++ b/backend/app/src/routes/category.rs @@ -1,9 +1,9 @@ +use budgeting_app_core::models::category::Category; use rocket::get; use rocket::http::Status; use rocket::serde::json::Json; use crate::databases::UserDataDb; -use crate::models::category::Category; use crate::queries::categories::get_all_categories as get_all_categories_query; #[get("/category")] diff --git a/backend/app/src/schema.rs b/backend/app/src/schema.rs deleted file mode 100644 index 372f8f3..0000000 --- a/backend/app/src/schema.rs +++ /dev/null @@ -1,72 +0,0 @@ -// @generated automatically by Diesel CLI. - -diesel::table! { - accounts (id) { - id -> Integer, - name -> Text, - opening_balance -> Integer, - opening_date -> Text, - } -} - -diesel::table! { - budget_updates (id) { - id -> Integer, - category_id -> Integer, - date -> Text, - new_budget -> Integer, - new_period -> Integer, - } -} - -diesel::table! { - categories (id) { - id -> Integer, - name -> Text, - } -} - -diesel::table! { - category_transfers (id) { - id -> Integer, - description -> Text, - quantity -> Integer, - from_category_id -> Integer, - to_category_id -> Integer, - } -} - -diesel::table! { - transaction_categorisations (id) { - id -> Integer, - description -> Text, - quantity -> Integer, - transaction_id -> Integer, - category_id -> Integer, - } -} - -diesel::table! { - transactions (id) { - id -> Integer, - description -> Text, - payee -> Text, - quantity -> Integer, - date -> Text, - account_id -> Integer, - } -} - -diesel::joinable!(budget_updates -> categories (category_id)); -diesel::joinable!(transaction_categorisations -> categories (category_id)); -diesel::joinable!(transaction_categorisations -> transactions (transaction_id)); -diesel::joinable!(transactions -> accounts (account_id)); - -diesel::allow_tables_to_appear_in_same_query!( - accounts, - budget_updates, - categories, - category_transfers, - transaction_categorisations, - transactions, -); diff --git a/backend/app/src/utils/calculate_budgets_accrual.rs b/backend/app/src/utils/calculate_budgets_accrual.rs index f14260d..c0d3d3a 100644 --- a/backend/app/src/utils/calculate_budgets_accrual.rs +++ b/backend/app/src/utils/calculate_budgets_accrual.rs @@ -1,4 +1,8 @@ -use crate::models::{budget_update::BudgetUpdate, category::Category, date_time_utc::DateTimeUtc}; +use budgeting_app_core::models::{ + budget_update::BudgetUpdate, + category::Category, + date_time_utc::DateTimeUtc +}; pub fn calculate_budgets_accrual(category: &Category, budget_updates: &[BudgetUpdate]) -> i64 { let mut budget_updates = budget_updates @@ -26,11 +30,10 @@ pub fn calculate_budgets_accrual(category: &Category, budget_updates: &[BudgetUp #[cfg(test)] mod test { - use chrono::{Days, Timelike, Utc}; - - use crate::models::{ + use budgeting_app_core::models::{ budget_update::BudgetUpdate, category::Category, date_time_utc::DateTimeUtc, }; + use chrono::{Days, Timelike, Utc}; use super::calculate_budgets_accrual; diff --git a/backend/app/src/utils/calculate_category_balance.rs b/backend/app/src/utils/calculate_category_balance.rs index 3c1c62f..e1de57e 100644 --- a/backend/app/src/utils/calculate_category_balance.rs +++ b/backend/app/src/utils/calculate_category_balance.rs @@ -1,4 +1,7 @@ -use crate::models::{budget_update::BudgetUpdate, category::Category}; +use budgeting_app_core::models::{ + budget_update::BudgetUpdate, + category::Category +}; use super::{calculate_budgets_accrual, find_by_id_or}; @@ -19,12 +22,10 @@ pub fn calculate_category_balance( #[cfg(test)] mod test { + use budgeting_app_core::models::{budget_update::BudgetUpdate, category::Category, date_time_utc::DateTimeUtc}; use chrono::{Days, Utc}; - use crate::{ - models::{budget_update::BudgetUpdate, category::Category, date_time_utc::DateTimeUtc}, - utils::calculate_category_balance, - }; + use crate::utils::calculate_category_balance; #[test] fn when_no_data_then_returns_zero() { -- cgit v1.2.3