Update actor_language.rs

This commit is contained in:
dullbananas 2024-04-09 06:25:01 -07:00 committed by GitHub
parent 4cd16d8794
commit 154573a49c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -83,11 +83,12 @@ impl LocalUserLanguage {
.build_transaction()
.run(|conn| {
Box::pin(async move {
use crate::schema::local_user_language::dsl::{local_user_id, local_user_language};
// Clear the current user languages
delete(local_user_language.filter(local_user_id.eq(for_local_user_id)))
.execute(conn)
.await?;
use crate::schema::local_user_language::dsl::{local_user_id, local_user_language, language_id};
// Delete old languages, not including new languages
let delete_old = delete(local_user_language)
.filter(local_user_id.eq(for_local_user_id))
.filter(language_id.ne_all(&lang_ids)
.execute(conn);
let forms = lang_ids
.into_iter()
@ -97,10 +98,14 @@ impl LocalUserLanguage {
})
.collect::<Vec<_>>();
insert_into(local_user_language)
// Insert new languages
let insert_new = insert_into(local_user_language)
.values(forms)
.execute(conn)
.await?;
.on_conflict((language_id, local_user_id))
.do_nothing()
.execute(conn);
tokio::try_join!(delete_old, insert_new)?;
Ok(())
}) as _
})