feat: add admin channel wipe endpoint

This commit is contained in:
İspik
2026-06-13 11:33:23 +03:00
parent e48d92c635
commit 05bceb6d4a
8 changed files with 86 additions and 1 deletions

View File

@@ -0,0 +1,40 @@
use rocket::State;
use rocket_empty::EmptyResponse;
use revolt_result::{create_error, Result};
use revolt_database::{AdminAuthorization, Database};
use revolt_database::util::reference::Reference;
use revolt_models::v0;
use crate::routes::admin::util::{create_audit_action, flatten_authorized_user, user_has_permission};
/// Wipe all the messages from a channel
#[openapi(tag = "Admin")]
#[delete("/admin/channels/<channel_id>/wipe?<case>")]
pub async fn admin_channel_wipe(
db: &State<Database>,
auth: AdminAuthorization,
channel_id: Reference<'_>,
case: Option<&str>
) -> Result<EmptyResponse> {
let admin = flatten_authorized_user(&auth);
if !user_has_permission(admin, v0::AdminUserPermissionFlags::ManageChannels) {
return Err(create_error!(MissingPermission {
permission: "ManageChannels".to_string()
}));
}
let mut channel = channel_id.as_channel(db).await?;
channel.wipe(db).await?;
create_audit_action(
&db,
&admin.id,
v0::AdminAuditItemActions::WipeChannel,
case,
Some(channel_id.id),
None,
)
.await?;
Ok(EmptyResponse)
}

View File

@@ -42,5 +42,6 @@ pub fn routes() -> (Vec<Route>, OpenApi) {
accounts::account_disable::admin_account_disable,
channels::actions::channel_delete::admin_delete_channel,
channels::actions::channel_edit::admin_channel_edit,
channels::actions::channel_wipe::admin_channel_wipe,
]
}