summaryrefslogtreecommitdiff
path: root/backend
diff options
context:
space:
mode:
authorJoe Carstairs <me@joeac.net>2024-09-17 13:20:04 +0100
committerJoe Carstairs <me@joeac.net>2024-09-17 13:20:04 +0100
commitcd269b3540fb5e3a988c1b59d3763db360b1fb34 (patch)
treea728403d8d5708ad29eeed2b391706b09a93fe4c /backend
parentf0e3e0cfb183253e03b1a61ddecb7b9330d47fdb (diff)
many, many changes
Diffstat (limited to 'backend')
-rw-r--r--backend/src/main.rs2
-rw-r--r--backend/src/models/date_time_utc.rs22
-rw-r--r--backend/src/queries/budget_updates/get_most_recent_with_category_id.rs8
-rw-r--r--backend/src/queries/category_budgets/get_most_recent_per_category_id.rs (renamed from backend/src/queries/category_budgets/get_all.rs)2
-rw-r--r--backend/src/queries/category_budgets/mod.rs4
-rw-r--r--backend/src/routes/budget.rs6
6 files changed, 34 insertions, 10 deletions
diff --git a/backend/src/main.rs b/backend/src/main.rs
index cdf4699..6966e3c 100644
--- a/backend/src/main.rs
+++ b/backend/src/main.rs
@@ -49,7 +49,7 @@ async fn rocket() -> Rocket<Build> {
routes::account::get_all_accounts,
routes::account::create_account,
routes::balance::get_all_category_balances,
- routes::budget::get_all_category_budgets,
+ routes::budget::get_current_category_budget_per_category,
routes::category::get_all_categories,
],
)
diff --git a/backend/src/models/date_time_utc.rs b/backend/src/models/date_time_utc.rs
index 6c5dc33..03d5802 100644
--- a/backend/src/models/date_time_utc.rs
+++ b/backend/src/models/date_time_utc.rs
@@ -32,6 +32,14 @@ impl DateTimeUtc {
.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)
}
@@ -46,7 +54,7 @@ impl ToSql<Text, Sqlite> for DateTimeUtc {
&'b self,
out: &mut diesel::serialize::Output<'b, '_, Sqlite>,
) -> serialize::Result {
- out.set_value(self.0.to_rfc3339());
+ out.set_value(self.to_day_str());
Ok(diesel::serialize::IsNull::No)
}
}
@@ -108,4 +116,16 @@ mod test {
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/src/queries/budget_updates/get_most_recent_with_category_id.rs b/backend/src/queries/budget_updates/get_most_recent_with_category_id.rs
index a52e592..4753092 100644
--- a/backend/src/queries/budget_updates/get_most_recent_with_category_id.rs
+++ b/backend/src/queries/budget_updates/get_most_recent_with_category_id.rs
@@ -1,5 +1,8 @@
-use crate::schema::budget_updates::{
- self as budget_updates_schema, dsl::budget_updates as budget_updates_table,
+use crate::{
+ models::date_time_utc::DateTimeUtc,
+ schema::budget_updates::{
+ self as budget_updates_schema, dsl::budget_updates as budget_updates_table,
+ },
};
use diesel::{dsl::max, result::Error, ExpressionMethods, QueryDsl, RunQueryDsl, SqliteConnection};
@@ -10,5 +13,6 @@ pub fn get_most_recent_budget_update_date_with_category_id(
budget_updates_table
.select(max(budget_updates_schema::date))
.filter(budget_updates_schema::category_id.eq(category_id))
+ .filter(budget_updates_schema::date.le(DateTimeUtc::now().to_day_str()))
.first(connection)
}
diff --git a/backend/src/queries/category_budgets/get_all.rs b/backend/src/queries/category_budgets/get_most_recent_per_category_id.rs
index 6a8b040..6b76efd 100644
--- a/backend/src/queries/category_budgets/get_all.rs
+++ b/backend/src/queries/category_budgets/get_most_recent_per_category_id.rs
@@ -9,7 +9,7 @@ use crate::{
};
use diesel::{result::Error, SqliteConnection};
-pub fn get_all_category_budgets(
+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)?;
diff --git a/backend/src/queries/category_budgets/mod.rs b/backend/src/queries/category_budgets/mod.rs
index 1a46cc3..29fc246 100644
--- a/backend/src/queries/category_budgets/mod.rs
+++ b/backend/src/queries/category_budgets/mod.rs
@@ -1,3 +1,3 @@
-mod get_all;
+mod get_most_recent_per_category_id;
-pub use self::get_all::get_all_category_budgets;
+pub use self::get_most_recent_per_category_id::get_most_recent_category_budget_per_category_id;
diff --git a/backend/src/routes/budget.rs b/backend/src/routes/budget.rs
index 024706e..67aae8e 100644
--- a/backend/src/routes/budget.rs
+++ b/backend/src/routes/budget.rs
@@ -6,12 +6,12 @@ use crate::databases::UserDataDb;
use crate::models::category_budget::CategoryBudget;
use crate::queries;
-#[get("/budget/category")]
-pub async fn get_all_category_budgets(
+#[get("/budget/category?current")]
+pub async fn get_current_category_budget_per_category(
user_data_db: UserDataDb,
) -> Result<Json<Vec<CategoryBudget>>, Status> {
user_data_db
- .run(queries::category_budgets::get_all_category_budgets)
+ .run(queries::category_budgets::get_most_recent_category_budget_per_category_id)
.await
.map(Json)
.map_err(|_| Status { code: 500 })