1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
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 diesel::{result::Error, SqliteConnection};
pub fn get_all_category_budgets(
connection: &mut SqliteConnection,
) -> Result<Vec<CategoryBudget>, Error> {
let category_ids: Vec<i32> = get_all_category_ids(connection)?;
let mut budgets = Vec::<CategoryBudget>::new();
for category_id in category_ids {
let most_recent_budget_update_date =
get_most_recent_budget_update_date_with_category_id(category_id, connection)?;
if most_recent_budget_update_date.is_none() {
budgets.push(CategoryBudget {
category_id,
budget: Option::None,
});
continue;
}
let most_recent_budget_update = get_first_budget_update_with_date(
most_recent_budget_update_date.unwrap().as_str(),
connection,
)?;
budgets.push(CategoryBudget {
category_id,
budget: Some(Budget::from(&most_recent_budget_update)),
});
}
Ok(budgets)
}
|