use anyhow::{Context, Result}; use diesel::{QueryDsl, RunQueryDsl, SelectableHelper, SqliteConnection}; use schist_models::Bucket; use schist_schema::schema::buckets::{self as buckets_schema, dsl::buckets as buckets_table}; pub fn delete_all_buckets(connection: &mut SqliteConnection) -> Result { let num_rows_deleted = diesel::delete(buckets_table) .execute(connection) .with_context(|| "failed to delete all buckets")?; Ok(num_rows_deleted) } pub fn get_all_buckets(connection: &mut SqliteConnection) -> Result> { let all_buckets = buckets_table .select(Bucket::as_select()) .load(connection) .with_context(|| "failed to get all buckets")?; Ok(all_buckets) } pub fn get_all_bucket_ids(connection: &mut SqliteConnection) -> Result> { let all_bucket_ids = buckets_table .select(buckets_schema::id) .load(connection) .with_context(|| "failed to get all bucket IDs")?; Ok(all_bucket_ids) } pub fn insert_buckets(buckets: &[Bucket], connection: &mut SqliteConnection) -> Result { let num_buckets_inserted = diesel::insert_into(buckets_table) .values(buckets) .execute(connection) .with_context(|| insert_err_msg(buckets))?; Ok(num_buckets_inserted) } fn insert_err_msg(buckets: &[Bucket]) -> String { format!( "failed to insert buckets: [{}]", buckets .iter() .map(|c| format!("\"{}\": \"{}\"", c.id, c.name)) .collect::>() .join(", ") ) }