summaryrefslogtreecommitdiff
path: root/rust/actualbudget_queries/src/actualbudget_accounts.rs
blob: 1d8843d61099ae9e954451831696a617bc76713a (plain)
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
use actualbudget_models::actualbudget_account::ActualbudgetAccount;
use actualbudget_schema::actualbudget_schema::accounts::{
    self as accounts_schema,
    dsl::accounts as accounts_table,
};
use anyhow::{Context, Result};
use diesel::{ExpressionMethods, OptionalExtension, QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection};

pub fn get_all_actualbudget_accounts(connection: &mut SqliteConnection) -> Result<Vec<ActualbudgetAccount>> {
    let actualbudget_accounts = accounts_table
        .select(ActualbudgetAccount::as_select())
        .load(connection)
        .with_context(|| "failed to get all Actualbudget accounts")?;
    Ok(actualbudget_accounts)
}

pub fn get_category_transfers_account(connection: &mut SqliteConnection) -> Result<Option<ActualbudgetAccount>> {
    let category_transfers_account = accounts_table
        .filter(accounts_schema::name.eq("Category transfers"))
        .select(ActualbudgetAccount::as_select())
        .first(connection)
        .optional()
        .with_context(|| "failed to get Category Transfers account")?;
    Ok(category_transfers_account)
}