summaryrefslogtreecommitdiff
path: root/backend/app
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2024-10-16 18:22:55 +0100
committerJoe Carstairs <me@joeac.net>2024-10-17 06:55:02 +0100
commit7adaace61a4fe983eba5ded3aaaf624ce6fb9014 (patch)
tree6e0697f9dbb6e249c60af5a92479a86316c55221 /backend/app
parent27b95c9186bd45edd4c982a7cc89cf69cf2c5d46 (diff)
Refactors some backend stuff to core lib
Diffstat (limited to 'backend/app')
-rw-r--r--backend/app/2024-08-31-084439_initial_setup/down.sql6
-rw-r--r--backend/app/2024-08-31-084439_initial_setup/up.sql70
-rw-r--r--backend/app/Cargo.lock10
-rw-r--r--backend/app/Cargo.toml2
-rw-r--r--backend/app/Rocket.toml2
-rw-r--r--backend/app/src/main.rs6
-rw-r--r--backend/app/src/models/account.rs15
-rw-r--r--backend/app/src/models/budget.rs44
-rw-r--r--backend/app/src/models/budget_update.rs17
-rw-r--r--backend/app/src/models/category.rs9
-rw-r--r--backend/app/src/models/category_balance.rs7
-rw-r--r--backend/app/src/models/category_budget.rs9
-rw-r--r--backend/app/src/models/category_transfer.rs11
-rw-r--r--backend/app/src/models/date_time_utc.rs131
-rw-r--r--backend/app/src/models/mod.rs10
-rw-r--r--backend/app/src/models/transaction.rs17
-rw-r--r--backend/app/src/models/transaction_categorisation.rs11
-rw-r--r--backend/app/src/queries/accounts/get_all.rs3
-rw-r--r--backend/app/src/queries/accounts/insert.rs7
-rw-r--r--backend/app/src/queries/budget_updates/get_all.rs2
-rw-r--r--backend/app/src/queries/budget_updates/get_first_with_date.rs2
-rw-r--r--backend/app/src/queries/budget_updates/get_most_recent_with_category_id.rs2
-rw-r--r--backend/app/src/queries/categories/get_all.rs2
-rw-r--r--backend/app/src/queries/categories/get_all_ids.rs2
-rw-r--r--backend/app/src/queries/category_balances/get_all.rs2
-rw-r--r--backend/app/src/queries/category_budgets/get_most_recent_per_category_id.rs12
-rw-r--r--backend/app/src/queries/category_transfers/sum_quantity_per_from_category_id.rs8
-rw-r--r--backend/app/src/queries/category_transfers/sum_quantity_per_to_category_id.rs8
-rw-r--r--backend/app/src/queries/transaction_categorisations/sum_quantity_per_category_id.rs2
-rw-r--r--backend/app/src/queries/transaction_categorisations/sum_quantity_per_to_category_id.rs0
-rw-r--r--backend/app/src/routes/account.rs6
-rw-r--r--backend/app/src/routes/balance.rs3
-rw-r--r--backend/app/src/routes/budget.rs2
-rw-r--r--backend/app/src/routes/budget_update.rs2
-rw-r--r--backend/app/src/routes/category.rs2
-rw-r--r--backend/app/src/schema.rs72
-rw-r--r--backend/app/src/utils/calculate_budgets_accrual.rs11
-rw-r--r--backend/app/src/utils/calculate_category_balance.rs11
38 files changed, 59 insertions, 479 deletions
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<Budget>,
-}
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<Utc>);
-
-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<Utc>) -> Self {
- Self(date_time_utc)
- }
-
- pub fn now() -> Self {
- Self(Utc::now())
- }
-}
-
-impl ToSql<Text, Sqlite> 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<Text, Sqlite> for DateTimeUtc {
- fn from_sql(bytes: <Sqlite as Backend>::RawValue<'_>) -> deserialize::Result<DateTimeUtc> {
- let str: String = FromSql::<Text, Sqlite>::from_sql(bytes)?;
- let date_time = str.as_str().parse::<DateTime<Utc>>()?;
- 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<Vec<Account>, 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<Vec<Category>, 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<Vec<i32>, 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
--- a/backend/app/src/queries/transaction_categorisations/sum_quantity_per_to_category_id.rs
+++ /dev/null
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<Json<Vec<Account>>, Status> {
+pub async fn get_all_accounts(user_data_db: UserDataDb) -> Result<Json<Vec<Account>>, (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() {