use anyhow::{Context, Result}; use diesel::{QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; use schist_models::budget_drip::BudgetDrip; use schist_schema::schema::budget_drips::dsl::budget_drips as budget_drips_table; pub fn delete_all_budget_drips(connection: &mut SqliteConnection) -> Result { let num_rows_deleted = diesel::delete(budget_drips_table) .execute(connection) .with_context(|| "failed to delete all budget drips")?; Ok(num_rows_deleted) } pub fn get_all_budget_drips(connection: &mut SqliteConnection) -> Result> { let all_budget_drips = budget_drips_table.select(BudgetDrip::as_select()) .load(connection) .with_context(|| "failed to get all budget drips")?; Ok(all_budget_drips) } pub fn insert_budget_drips( budget_drips: &[BudgetDrip], connection: &mut SqliteConnection, ) -> Result { let num_budget_drips_inserted = diesel::insert_into(budget_drips_table) .values(budget_drips) .execute(connection) .with_context(|| insert_err_msg(budget_drips))?; Ok(num_budget_drips_inserted) } fn insert_err_msg(budget_drips: &[BudgetDrip]) -> String { format!( "failed to insert budget drips: [{}]", budget_drips .iter() .map(|a| a.id.to_string()) .collect::>() .join(", ") ) }