mirror of
https://github.com/flibusta-apps/users_settings_server.git
synced 2025-12-06 14:45:38 +01:00
Rewrite to rust
This commit is contained in:
68
src/views/users/utils.rs
Normal file
68
src/views/users/utils.rs
Normal file
@@ -0,0 +1,68 @@
|
||||
use std::collections::HashMap;
|
||||
|
||||
use crate::{prisma::{user_settings, language, language_to_user}, db::get_prisma_client};
|
||||
|
||||
|
||||
pub async fn update_languages(
|
||||
user: user_settings::Data,
|
||||
new_langs: Vec<String>
|
||||
) {
|
||||
let client = get_prisma_client().await;
|
||||
|
||||
// Delete
|
||||
{
|
||||
let need_delete: Vec<_> = user.languages().unwrap()
|
||||
.iter()
|
||||
.map(|item| {
|
||||
let language::Data{ id, code, .. } = *item.clone().language.unwrap();
|
||||
(id, code)
|
||||
})
|
||||
.filter(|(_, code)| !new_langs.contains(code))
|
||||
.map(|(id, _)| id)
|
||||
.collect();
|
||||
|
||||
let _ = client.language_to_user()
|
||||
.delete_many(
|
||||
vec![language_to_user::id::in_vec(need_delete)]
|
||||
)
|
||||
.exec()
|
||||
.await;
|
||||
}
|
||||
|
||||
// Create
|
||||
{
|
||||
let languages: HashMap<_, _> = client.language()
|
||||
.find_many(vec![])
|
||||
.exec()
|
||||
.await
|
||||
.unwrap()
|
||||
.into_iter()
|
||||
.map(|l| (l.code, l.id))
|
||||
.collect();
|
||||
|
||||
let current_langs: Vec<_> = user.languages().unwrap()
|
||||
.iter()
|
||||
.map(|item| item.clone().language.unwrap().code)
|
||||
.collect();
|
||||
|
||||
let need_create: Vec<i32> = new_langs
|
||||
.into_iter()
|
||||
.filter(|code| !current_langs.contains(code))
|
||||
.map(|code| *languages.get(&code).unwrap())
|
||||
.collect();
|
||||
|
||||
let _ = client.language_to_user()
|
||||
.create_many(
|
||||
need_create
|
||||
.iter()
|
||||
.map(|language_id| language_to_user::create_unchecked(
|
||||
*language_id,
|
||||
user.id,
|
||||
vec![]
|
||||
))
|
||||
.collect()
|
||||
)
|
||||
.exec()
|
||||
.await;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user