update user channels, fix #721
This commit is contained in:
parent
b63cdb9888
commit
a1cc272697
@ -309,6 +309,7 @@ async fn update_user(
|
|||||||
role: AuthDetails<Role>,
|
role: AuthDetails<Role>,
|
||||||
user: web::ReqData<UserMeta>,
|
user: web::ReqData<UserMeta>,
|
||||||
) -> Result<impl Responder, ServiceError> {
|
) -> Result<impl Responder, ServiceError> {
|
||||||
|
let channel_ids = data.channel_ids.clone().unwrap_or_default();
|
||||||
let mut fields = String::new();
|
let mut fields = String::new();
|
||||||
|
|
||||||
if let Some(mail) = data.mail.clone() {
|
if let Some(mail) = data.mail.clone() {
|
||||||
@ -319,21 +320,6 @@ async fn update_user(
|
|||||||
fields.push_str(&format!("mail = '{mail}'"));
|
fields.push_str(&format!("mail = '{mail}'"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if let Some(channel_ids) = &data.channel_ids {
|
|
||||||
if !fields.is_empty() {
|
|
||||||
fields.push_str(", ");
|
|
||||||
}
|
|
||||||
|
|
||||||
fields.push_str(&format!(
|
|
||||||
"channel_ids = '{}'",
|
|
||||||
channel_ids
|
|
||||||
.iter()
|
|
||||||
.map(|i| i.to_string())
|
|
||||||
.collect::<Vec<String>>()
|
|
||||||
.join(",")
|
|
||||||
));
|
|
||||||
}
|
|
||||||
|
|
||||||
if !data.password.is_empty() {
|
if !data.password.is_empty() {
|
||||||
if !fields.is_empty() {
|
if !fields.is_empty() {
|
||||||
fields.push_str(", ");
|
fields.push_str(", ");
|
||||||
@ -354,11 +340,19 @@ async fn update_user(
|
|||||||
fields.push_str(&format!("password = '{password_hash}'"));
|
fields.push_str(&format!("password = '{password_hash}'"));
|
||||||
}
|
}
|
||||||
|
|
||||||
if handles::update_user(&pool, *id, fields).await.is_ok() {
|
handles::update_user(&pool, *id, fields).await?;
|
||||||
return Ok("Update Success");
|
|
||||||
};
|
|
||||||
|
|
||||||
Err(ServiceError::InternalServerError)
|
let related_channels = handles::select_related_channels(&pool, Some(*id)).await?;
|
||||||
|
|
||||||
|
for channel in related_channels {
|
||||||
|
if !channel_ids.contains(&channel.id) {
|
||||||
|
handles::delete_user_channel(&pool, *id, channel.id).await?;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
handles::insert_user_channel(&pool, *id, channel_ids).await?;
|
||||||
|
|
||||||
|
Ok("Update Success")
|
||||||
}
|
}
|
||||||
|
|
||||||
/// **Add User**
|
/// **Add User**
|
||||||
|
@ -94,6 +94,20 @@ pub async fn select_related_channels(
|
|||||||
Ok(results)
|
Ok(results)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub async fn delete_user_channel(
|
||||||
|
conn: &Pool<Sqlite>,
|
||||||
|
user_id: i32,
|
||||||
|
channel_id: i32,
|
||||||
|
) -> Result<SqliteQueryResult, sqlx::Error> {
|
||||||
|
let query = "DELETE FROM user_channels WHERE user_id = $1 AND channel_id = $2";
|
||||||
|
|
||||||
|
sqlx::query(query)
|
||||||
|
.bind(user_id)
|
||||||
|
.bind(channel_id)
|
||||||
|
.execute(conn)
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
|
||||||
pub async fn update_channel(
|
pub async fn update_channel(
|
||||||
conn: &Pool<Sqlite>,
|
conn: &Pool<Sqlite>,
|
||||||
id: i32,
|
id: i32,
|
||||||
|
2
frontend
2
frontend
@ -1 +1 @@
|
|||||||
Subproject commit 2045e47ab5e9f42ff73e03a7c4c604821a73f7ca
|
Subproject commit e9eff70158431a69080bb192a5bb793b0475938a
|
Loading…
Reference in New Issue
Block a user