use anyhow::{Context, Result}; use diesel::{QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; use schist_models::Transaction; use schist_schema::schema::transactions::dsl::transactions as transactions_table; pub fn delete_all_transactions(connection: &mut SqliteConnection) -> Result { let num_rows_deleted = diesel::delete(transactions_table) .execute(connection) .with_context(|| "failed to delete all transactions")?; Ok(num_rows_deleted) } pub fn get_all_transactions(connection: &mut SqliteConnection) -> Result> { let all_transactions = transactions_table .select(Transaction::as_select()) .load(connection) .with_context(|| "failed to get all transactions")?; Ok(all_transactions) } pub fn insert_transactions( transactions: &[Transaction], connection: &mut SqliteConnection, ) -> Result { let num_rows_inserted = diesel::insert_into(transactions_table) .values(transactions) .execute(connection) .with_context(|| insert_err_msg(&transactions))?; Ok(num_rows_inserted) } fn insert_err_msg(transactions: &[Transaction]) -> String { format!( "failed to insert transactions: [{}]", transactions .iter() .map(|t| t.id.to_string()) .collect::>() .join(", ") ) }