use actualbudget_models::{ActualbudgetDate, ActualbudgetTransaction}; use actualbudget_schema::actualbudget_schema::v_transactions::{ self as transactions_schema, dsl::v_transactions as transactions_table, }; use anyhow::{Context, Result}; use diesel::{dsl::min, result::Error, QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; pub fn get_all_actualbudget_transactions(connection: &mut SqliteConnection) -> Result> { let actualbudget_transactions = transactions_table .select(ActualbudgetTransaction::as_select()) .load(connection) .with_context(|| "failed to get all Actualbudget transactions")?; Ok(actualbudget_transactions) } pub fn get_first_actualbudget_transaction_date(connection: &mut SqliteConnection) -> Result { let date_as_int = transactions_table .select(min(transactions_schema::date)) .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)) }