summaryrefslogtreecommitdiff
path: root/actualbudget_queries/src/actualbudget_zero_budgets.rs
blob: 5ae4055228c97f35d5e5b6ff5da3c7760eb6dfab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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<Vec<ActualbudgetZeroBudget>> {
    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<ActualbudgetDate> {
    let date_as_int = zero_budgets_table
        .select(min(zero_budgets_schema::month))
        .first::<Option<i32>>(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))
}