use anyhow::{Context, Result}; use actualbudget_models::{actualbudget_schema::zero_budgets as zero_budgets_schema, ActualbudgetDate, ActualbudgetZeroBudget}; use actualbudget_schema::actualbudget_schema::zero_budgets::dsl::zero_budgets as zero_budgets_table; use diesel::{dsl::min, result::Error, QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; pub fn get_all_actualbudget_zero_budgets(connection: &mut SqliteConnection) -> Result> { let zero_budgets = zero_budgets_table .select(ActualbudgetZeroBudget::as_select()) .load(connection) .with_context(|| "failed to get all Actualbudget zero budgets")?; Ok(zero_budgets) } pub fn get_first_zero_budget_date(connection: &mut SqliteConnection) -> Result { let date_as_int = zero_budgets_table .select(min(zero_budgets_schema::month)) .first::>(connection) .map_or_else(|e| Err(e), |o| o.map_or_else(|| Err(Error::NotFound), |i| Ok(i)))?; Ok(ActualbudgetDate::from_i32(date_as_int)) }