From 52ed5100c2446e0b261085639e123e7e124cab2c Mon Sep 17 00:00:00 2001 From: Damocles <106018783+Damocles078@users.noreply.github.com> Date: Sat, 28 Mar 2026 01:31:57 +0100 Subject: [PATCH] fix: improve generated openapi.json (#584) * fix: /bots/{bot} Paths "/bots/{bot}" and "/bots/{target}" must not be equivalent. Signed-off-by: Damocles078 * fix: /channels/{group_id}/recipients/{member_id} Paths "/channels/{group_id}/recipients/{member_id}" and "/channels/{target}/recipients/{member}" must not be equivalent. Signed-off-by: Damocles078 * fix: /channels/{channel_id}/webhook Paths "/channels/{target}/webhooks" and "/channels/{channel_id}/webhooks" must not be equivalent. Signed-off-by: Damocles078 * fix: /servers/{server_id}/members/{member_id} Paths "/servers/{target}/members/{member}" and "/servers/{server}/members/{member}" must not be equivalent. Signed-off-by: Damocles078 * fix: /custom/emoji/{emoji_id} Paths "/custom/emoji/{id}" and "/custom/emoji/{emoji_id}" must not be equivalent. Signed-off-by: Damocles078 --------- Signed-off-by: Damocles078 Signed-off-by: Damocles <106018783+Damocles078@users.noreply.github.com> --- crates/delta/src/routes/bots/delete.rs | 6 +++--- crates/delta/src/routes/bots/edit.rs | 6 +++--- crates/delta/src/routes/bots/fetch.rs | 6 +++--- .../src/routes/channels/group_remove_member.rs | 14 +++++++------- .../src/routes/channels/webhook_create.rs | 6 +++--- .../src/routes/customisation/emoji_create.rs | 8 ++++---- crates/delta/src/routes/servers/member_edit.rs | 12 ++++++------ .../delta/src/routes/servers/member_fetch.rs | 10 +++++----- .../delta/src/routes/servers/member_remove.rs | 18 +++++++++--------- 9 files changed, 43 insertions(+), 43 deletions(-) diff --git a/crates/delta/src/routes/bots/delete.rs b/crates/delta/src/routes/bots/delete.rs index 11132f27..c3c89fcc 100644 --- a/crates/delta/src/routes/bots/delete.rs +++ b/crates/delta/src/routes/bots/delete.rs @@ -11,14 +11,14 @@ use rocket_empty::EmptyResponse; /// /// Delete a bot by its id. #[openapi(tag = "Bots")] -#[delete("/")] +#[delete("/")] pub async fn delete_bot( db: &State, voice_client: &State, user: User, - target: Reference<'_>, + bot_id: Reference<'_>, ) -> Result { - let bot = target.as_bot(db).await?; + let bot = bot_id.as_bot(db).await?; if bot.owner != user.id { return Err(create_error!(NotFound)); } diff --git a/crates/delta/src/routes/bots/edit.rs b/crates/delta/src/routes/bots/edit.rs index 6c454e13..a142ba46 100644 --- a/crates/delta/src/routes/bots/edit.rs +++ b/crates/delta/src/routes/bots/edit.rs @@ -10,11 +10,11 @@ use validator::Validate; /// /// Edit bot details by its id. #[openapi(tag = "Bots")] -#[patch("/", data = "")] +#[patch("/", data = "")] pub async fn edit_bot( db: &State, user: User, - target: Reference<'_>, + bot_id: Reference<'_>, data: Json, ) -> Result> { let data = data.into_inner(); @@ -24,7 +24,7 @@ pub async fn edit_bot( }) })?; - let mut bot = target.as_bot(db).await?; + let mut bot = bot_id.as_bot(db).await?; if bot.owner != user.id { return Err(create_error!(NotFound)); } diff --git a/crates/delta/src/routes/bots/fetch.rs b/crates/delta/src/routes/bots/fetch.rs index 586ce124..344620cf 100644 --- a/crates/delta/src/routes/bots/fetch.rs +++ b/crates/delta/src/routes/bots/fetch.rs @@ -7,17 +7,17 @@ use rocket::{serde::json::Json, State}; /// /// Fetch details of a bot you own by its id. #[openapi(tag = "Bots")] -#[get("/")] +#[get("/")] pub async fn fetch_bot( db: &State, user: User, - bot: Reference<'_>, + bot_id: Reference<'_>, ) -> Result> { if user.bot.is_some() { return Err(create_error!(IsBot)); } - let bot = bot.as_bot(db).await?; + let bot = bot_id.as_bot(db).await?; if bot.owner != user.id { return Err(create_error!(NotFound)); } diff --git a/crates/delta/src/routes/channels/group_remove_member.rs b/crates/delta/src/routes/channels/group_remove_member.rs index 083bb44e..05221629 100644 --- a/crates/delta/src/routes/channels/group_remove_member.rs +++ b/crates/delta/src/routes/channels/group_remove_member.rs @@ -11,20 +11,20 @@ use rocket_empty::EmptyResponse; /// /// Removes a user from the group. #[openapi(tag = "Groups")] -#[delete("//recipients/")] +#[delete("//recipients/")] pub async fn remove_member( db: &State, voice_client: &State, amqp: &State, user: User, - target: Reference<'_>, - member: Reference<'_>, + group_id: Reference<'_>, + member_id: Reference<'_>, ) -> Result { if user.bot.is_some() { return Err(create_error!(IsBot)); } - let channel = target.as_channel(db).await?; + let channel = group_id.as_channel(db).await?; if let Channel::Group { owner, recipients, .. @@ -36,7 +36,7 @@ pub async fn remove_member( })); } - let member = member.as_user(db).await?; + let member = member_id.as_user(db).await?; if user.id == member.id { return Err(create_error!(CannotRemoveYourself)); } @@ -54,8 +54,8 @@ pub async fn remove_member( let user_voice_channel = UserVoiceChannel::from_channel(&channel); - if is_in_voice_channel(member.id, &user_voice_channel).await? { - remove_user_from_voice_channel(voice_client, &user_voice_channel, member.id).await?; + if is_in_voice_channel(member_id.id, &user_voice_channel).await? { + remove_user_from_voice_channel(voice_client, &user_voice_channel, member_id.id).await?; }; Ok(EmptyResponse) diff --git a/crates/delta/src/routes/channels/webhook_create.rs b/crates/delta/src/routes/channels/webhook_create.rs index 71f8e8de..dc8cad64 100644 --- a/crates/delta/src/routes/channels/webhook_create.rs +++ b/crates/delta/src/routes/channels/webhook_create.rs @@ -15,11 +15,11 @@ use validator::Validate; /// /// Creates a webhook which 3rd party platforms can use to send messages #[openapi(tag = "Webhooks")] -#[post("//webhooks", data = "")] +#[post("//webhooks", data = "")] pub async fn create_webhook( db: &State, user: User, - target: Reference<'_>, + channel_id: Reference<'_>, data: Json, ) -> Result> { let data = data.into_inner(); @@ -29,7 +29,7 @@ pub async fn create_webhook( }) })?; - let channel = target.as_channel(db).await?; + let channel = channel_id.as_channel(db).await?; if !matches!(channel, Channel::TextChannel { .. } | Channel::Group { .. }) { return Err(create_error!(InvalidOperation)); diff --git a/crates/delta/src/routes/customisation/emoji_create.rs b/crates/delta/src/routes/customisation/emoji_create.rs index d8288dae..52b5c904 100644 --- a/crates/delta/src/routes/customisation/emoji_create.rs +++ b/crates/delta/src/routes/customisation/emoji_create.rs @@ -11,11 +11,11 @@ use rocket::{serde::json::Json, State}; /// /// Create an emoji by its Autumn upload id. #[openapi(tag = "Emojis")] -#[put("/emoji/", data = "")] +#[put("/emoji/", data = "")] pub async fn create_emoji( db: &State, user: User, - id: String, + emoji_id: String, data: Json, ) -> Result> { let config = config().await; @@ -50,11 +50,11 @@ pub async fn create_emoji( }; // Find the relevant attachment - let attachment = File::use_emoji(db, &id, &id, &user.id).await?; + let attachment = File::use_emoji(db, &emoji_id, &emoji_id, &user.id).await?; // Create the emoji object let emoji = Emoji { - id, + id: emoji_id, parent: data.parent.into(), creator_id: user.id, name: data.name, diff --git a/crates/delta/src/routes/servers/member_edit.rs b/crates/delta/src/routes/servers/member_edit.rs index 87b45524..e3f63e49 100644 --- a/crates/delta/src/routes/servers/member_edit.rs +++ b/crates/delta/src/routes/servers/member_edit.rs @@ -24,13 +24,13 @@ use validator::Validate; /// /// Edit a member by their id. #[openapi(tag = "Server Members")] -#[patch("//members/", data = "")] +#[patch("//members/", data = "")] pub async fn edit( db: &State, voice_client: &State, user: User, - server: Reference<'_>, - member: Reference<'_>, + server_id: Reference<'_>, + member_id: Reference<'_>, data: Json, ) -> Result> { let data = data.into_inner(); @@ -41,9 +41,9 @@ pub async fn edit( })?; // Fetch server and member - let mut server = server.as_server(db).await?; - let target_user = member.as_user(db).await?; - let mut member = member.as_member(db, &server.id).await?; + let mut server = server_id.as_server(db).await?; + let target_user = member_id.as_user(db).await?; + let mut member = member_id.as_member(db, &server.id).await?; // Fetch our currrent permissions let mut query = DatabasePermissionQuery::new(db, &user).server(&server); diff --git a/crates/delta/src/routes/servers/member_fetch.rs b/crates/delta/src/routes/servers/member_fetch.rs index c05935be..967f9814 100644 --- a/crates/delta/src/routes/servers/member_fetch.rs +++ b/crates/delta/src/routes/servers/member_fetch.rs @@ -11,21 +11,21 @@ use rocket::{serde::json::Json, State}; /// /// Retrieve a member. #[openapi(tag = "Server Members")] -#[get("//members/?")] +#[get("//members/?")] pub async fn fetch( db: &State, user: User, - target: Reference<'_>, - member: Reference<'_>, + server_id: Reference<'_>, + member_id: Reference<'_>, roles: Option, ) -> Result> { - let server = target.as_server(db).await?; + let server = server_id.as_server(db).await?; let mut query = DatabasePermissionQuery::new(db, &user).server(&server); if !query.are_we_a_member().await { return Err(create_error!(NotFound)); } - let member = member.as_member(db, &server.id).await?; + let member = member_id.as_member(db, &server.id).await?; if let Some(true) = roles { Ok(Json(v0::MemberResponse::MemberWithRoles { roles: server diff --git a/crates/delta/src/routes/servers/member_remove.rs b/crates/delta/src/routes/servers/member_remove.rs index de5b0254..1885c5ba 100644 --- a/crates/delta/src/routes/servers/member_remove.rs +++ b/crates/delta/src/routes/servers/member_remove.rs @@ -15,21 +15,21 @@ use rocket_empty::EmptyResponse; /// /// Removes a member from the server. #[openapi(tag = "Server Members")] -#[delete("//members/")] +#[delete("//members/")] pub async fn kick( db: &State, voice_client: &State, user: User, - target: Reference<'_>, - member: Reference<'_>, + server_id: Reference<'_>, + member_id: Reference<'_>, ) -> Result { - let server = target.as_server(db).await?; + let server = server_id.as_server(db).await?; - if member.id == user.id { + if member_id.id == user.id { return Err(create_error!(CannotRemoveYourself)); } - if member.id == server.owner { + if member_id.id == server.owner { return Err(create_error!(InvalidOperation)); } @@ -38,7 +38,7 @@ pub async fn kick( .await .throw_if_lacking_channel_permission(ChannelPermission::KickMembers)?; - let member = member.as_member(db, &server.id).await?; + let member = member_id.as_member(db, &server.id).await?; if member.get_ranking(query.server_ref().as_ref().unwrap()) <= query.get_member_rank().unwrap_or(i64::MIN) { @@ -49,14 +49,14 @@ pub async fn kick( .remove(db, &server, RemovalIntention::Kick, false) .await?; - if let Some(channel_id) = get_user_voice_channel_in_server(target.id, &server.id).await? { + if let Some(channel_id) = get_user_voice_channel_in_server(member_id.id, &server.id).await? { remove_user_from_voice_channel( voice_client, &UserVoiceChannel { id: channel_id, server_id: Some(server.id.clone()), }, - target.id, + member_id.id, ) .await?; };