feat: add id field to role (#470)

This commit is contained in:
Angelo Kontaxis
2026-01-09 20:06:16 +00:00
committed by GitHub
parent a5387b64af
commit 2afea56e56
14 changed files with 124 additions and 69 deletions

View File

@@ -47,6 +47,7 @@
],
"roles": {
"__ID:5__": {
"_id": "__ID:5__",
"name": "Moderator",
"permissions": {
"a": 545270216,
@@ -55,6 +56,7 @@
"rank": 1
},
"__ID:6__": {
"_id": "__ID:6__",
"name": "Owner",
"permissions": {
"a": 0,
@@ -63,6 +65,7 @@
"rank": 0
},
"__ID:7__": {
"_id": "__ID:7__",
"name": "Lower Rank 1",
"permissions": {
"a": 0,
@@ -71,6 +74,7 @@
"rank": 2
},
"__ID:8__": {
"_id": "__ID:8__",
"name": "Lower Rank 2",
"permissions": {
"a": 0,

View File

@@ -151,29 +151,20 @@ mod test {
name: "Hidden Channel".to_string(),
description: None,
nsfw: Some(false),
voice: None
voice: None,
},
true,
)
.await
.expect("Failed to make new channel");
let role = Role {
name: "Show Hidden Channel".to_string(),
permissions: OverrideField { a: 0, d: 0 },
colour: None,
hoist: false,
rank: 5,
};
let role_id = role
.create(&harness.db, &server.id)
let role = Role::create(&harness.db, &server, "Show Hidden Channel".to_string())
.await
.expect("Failed to create the role");
let mut overrides = HashMap::new();
overrides.insert(
role_id.clone(),
role.id.clone(),
OverrideField {
a: (ChannelPermission::ViewChannel) as i64,
d: 0,
@@ -281,7 +272,7 @@ mod test {
"Mention failed to be scrubbed when the user cannot see the channel"
);
let second_member_roles = vec![role_id.clone()];
let second_member_roles = vec![role.id.clone()];
let partial = PartialMember {
id: None,
joined_at: None,
@@ -290,7 +281,7 @@ mod test {
timeout: None,
roles: Some(second_member_roles),
can_publish: None,
can_receive: None
can_receive: None,
};
second_member
.update(&harness.db, partial, vec![])
@@ -496,7 +487,7 @@ mod test {
let (_, _, other_user) = harness.new_user().await;
let (server, _) = harness.new_server(&user).await;
let channel = harness.new_channel(&server).await;
let (role_id, _role) = harness
let role = harness
.new_role(
&server,
1,
@@ -518,7 +509,7 @@ mod test {
Some(&harness.amqp),
channel.clone(),
v0::DataMessageSend {
content: Some(format!("Mentioning @everyone and role <%{}>", &role_id)),
content: Some(format!("Mentioning @everyone and role <%{}>", &role.id)),
nonce: None,
attachments: None,
replies: None,
@@ -563,7 +554,7 @@ mod test {
Some(&harness.amqp),
channel.clone(),
v0::DataMessageSend {
content: Some(format!("Mentioning `@everyone` and role `<%{}>`", &role_id)),
content: Some(format!("Mentioning `@everyone` and role `<%{}>`", &role.id)),
nonce: None,
attachments: None,
replies: None,
@@ -605,7 +596,7 @@ mod test {
"Role mentions detected when inside codeblock"
);
other_member.roles.push(role_id.clone());
other_member.roles.push(role.id.clone());
harness
.db
.update_member(
@@ -615,10 +606,10 @@ mod test {
id: None,
joined_at: None,
nickname: None,
roles: Some(vec![role_id.clone()]),
roles: Some(vec![role.id.clone()]),
timeout: None,
can_publish: None,
can_receive: None
can_receive: None,
},
vec![],
)
@@ -632,7 +623,7 @@ mod test {
Some(&harness.amqp),
channel.clone(),
v0::DataMessageSend {
content: Some(format!("Mentioning @everyone and role <%{}>", &role_id)),
content: Some(format!("Mentioning @everyone and role <%{}>", &role.id)),
nonce: None,
attachments: None,
replies: None,

View File

@@ -40,17 +40,10 @@ pub async fn create(
}));
};
let role = Role {
name: data.name,
// Rank of the new role should be below the lowest role
rank: server.roles.len() as i64,
colour: None,
hoist: false,
permissions: Default::default(),
};
let role = Role::create(db, &server, data.name).await?;
Ok(Json(v0::NewRoleResponse {
id: role.create(db, &server.id).await?,
id: role.id.clone(),
role: role.into(),
}))
}

View File

@@ -37,7 +37,7 @@ pub async fn delete(
return Err(create_error!(NotElevated));
}
role.delete(db, &server.id, &role_id).await?;
role.delete(db, &server.id).await?;
for channel_id in &server.channels {
let channel = Reference::from_unchecked(channel_id).as_channel(db).await?;

View File

@@ -61,7 +61,6 @@ pub async fn edit(
role.update(
db,
&server.id,
&role_id,
partial,
remove.into_iter().map(Into::into).collect(),
)

View File

@@ -6,7 +6,7 @@ use futures::StreamExt;
use rand::Rng;
use redis_kiss::redis::aio::PubSub;
use revolt_database::{
events::client::EventV1, Channel, Database, Member, Message, Server, User, AMQP,
events::client::EventV1, Channel, Database, Member, Message, PartialRole, Server, User, AMQP,
};
use revolt_database::{util::idempotency::IdempotencyKey, Role};
use revolt_models::v0;
@@ -139,21 +139,26 @@ impl TestHarness {
server: &Server,
rank: i64,
overrides: Option<OverrideField>,
) -> (String, Role) {
let role = Role {
name: TestHarness::rand_string(),
permissions: overrides.unwrap_or(OverrideField { a: 0, d: 0 }),
rank,
colour: None,
hoist: false,
};
let id = role
.create(&self.db, &server.id)
) -> Role {
let mut role = Role::create(&self.db, &server, TestHarness::rand_string())
.await
.expect("Failed to create test role");
(id, role)
if let Some(overrides) = overrides {
role.update(
&self.db,
&server.id,
PartialRole {
permissions: Some(overrides),
..Default::default()
},
Vec::new(),
)
.await
.expect("Failed to set test role overrides");
};
role
}
pub async fn new_channel(&self, server: &Server) -> Channel {
@@ -165,7 +170,7 @@ impl TestHarness {
name: "Test Channel".to_string(),
description: None,
nsfw: Some(false),
voice: None
voice: None,
},
true,
)