diff options
Diffstat (limited to 'backend/src')
| -rw-r--r-- | backend/src/main.rs | 2 | ||||
| -rw-r--r-- | backend/src/models/date_time_utc.rs | 22 | ||||
| -rw-r--r-- | backend/src/queries/budget_updates/get_most_recent_with_category_id.rs | 8 | ||||
| -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.rs | 4 | ||||
| -rw-r--r-- | backend/src/routes/budget.rs | 6 |
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 }) |
