forked from jmug/stoatchat
fix: ensure server ID is fanned out with role ranks update
fix: ensure original order is correctly sorted on edit route
This commit is contained in:
@@ -166,7 +166,7 @@ pub enum EventV1 {
|
|||||||
ServerRoleDelete { id: String, role_id: String },
|
ServerRoleDelete { id: String, role_id: String },
|
||||||
|
|
||||||
/// Server roles ranks updated
|
/// Server roles ranks updated
|
||||||
ServerRoleRanksUpdate { ranks: Vec<String> },
|
ServerRoleRanksUpdate { id: String, ranks: Vec<String> },
|
||||||
|
|
||||||
/// Update existing user
|
/// Update existing user
|
||||||
UserUpdate {
|
UserUpdate {
|
||||||
|
|||||||
@@ -228,6 +228,13 @@ impl Server {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Ordered roles list
|
||||||
|
pub fn ordered_roles(&self) -> Vec<(String, Role)> {
|
||||||
|
let mut ordered_roles = self.roles.clone().into_iter().collect::<Vec<_>>();
|
||||||
|
ordered_roles.sort_by(|(_, role_a), (_, role_b)| role_a.rank.cmp(&role_b.rank));
|
||||||
|
ordered_roles
|
||||||
|
}
|
||||||
|
|
||||||
/// Set role permission on a server
|
/// Set role permission on a server
|
||||||
pub async fn set_role_permission(
|
pub async fn set_role_permission(
|
||||||
&mut self,
|
&mut self,
|
||||||
@@ -275,9 +282,12 @@ impl Server {
|
|||||||
.await?;
|
.await?;
|
||||||
|
|
||||||
// Publish bulk update event
|
// Publish bulk update event
|
||||||
EventV1::ServerRoleRanksUpdate { ranks: new_order }
|
EventV1::ServerRoleRanksUpdate {
|
||||||
.p(self.id.clone())
|
id: self.id.clone(),
|
||||||
.await;
|
ranks: new_order,
|
||||||
|
}
|
||||||
|
.p(self.id.clone())
|
||||||
|
.await;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,7 +26,12 @@ pub async fn edit_role_ranks(
|
|||||||
.await
|
.await
|
||||||
.throw_if_lacking_channel_permission(ChannelPermission::ManageRole)?;
|
.throw_if_lacking_channel_permission(ChannelPermission::ManageRole)?;
|
||||||
|
|
||||||
let existing_order = server.roles.keys().cloned().collect::<Vec<_>>();
|
let existing_order = server
|
||||||
|
.ordered_roles()
|
||||||
|
.into_iter()
|
||||||
|
.map(|(id, _)| id)
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
let new_order = data.ranks.clone().into_iter().collect::<Vec<_>>();
|
let new_order = data.ranks.clone().into_iter().collect::<Vec<_>>();
|
||||||
|
|
||||||
// Verify all roles are in the new ordering
|
// Verify all roles are in the new ordering
|
||||||
@@ -36,7 +41,7 @@ pub async fn edit_role_ranks(
|
|||||||
return Err(create_error!(InvalidOperation));
|
return Err(create_error!(InvalidOperation));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Don't have to check what the user cant modify if they are the server owner
|
// Don't have to check what the user can't modify if they are the server owner
|
||||||
if server.owner != user.id {
|
if server.owner != user.id {
|
||||||
let member_top_rank = query.get_member_rank();
|
let member_top_rank = query.get_member_rank();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user