use crate::{ newtypes::LocalSiteId, schema::tagline::dsl::*, source::tagline::*, utils::{get_conn, DbPool}, }; use diesel::{insert_into, result::Error, ExpressionMethods, QueryDsl}; use diesel_async::{AsyncPgConnection, RunQueryDsl}; impl Tagline { pub async fn replace( pool: &DbPool, for_local_site_id: LocalSiteId, list_content: Option>, ) -> Result<(), Error> { if let Some(list) = list_content { let conn = &mut get_conn(pool).await?; conn .build_transaction() .run(|conn| { Box::pin(async move { Self::clear(conn).await?; for item in list { let form = TaglineForm { local_site_id: for_local_site_id, content: item, updated: None, }; insert_into(tagline) .values(form) .get_result::(conn) .await?; } Ok(()) }) as _ }) .await } else { Ok(()) } } async fn clear(conn: &mut AsyncPgConnection) -> Result { diesel::delete(tagline).execute(conn).await } pub async fn get_all(pool: &DbPool, for_local_site_id: LocalSiteId) -> Result, Error> { use crate::schema::tagline::dsl::*; let conn = &mut get_conn(pool).await?; tagline .filter(local_site_id.eq(for_local_site_id)) .get_results::(conn) .await } }