feat: bulk message delete

This commit is contained in:
Paul Makles
2022-05-07 16:42:06 +01:00
parent 09e918d8e0
commit ac4cedd014
6 changed files with 49 additions and 4 deletions

2
Cargo.lock generated
View File

@@ -2999,7 +2999,7 @@ dependencies = [
[[package]]
name = "revolt-quark"
version = "0.1.0"
source = "git+https://github.com/revoltchat/quark?rev=e5e8cae091eb7220cd37837494ece966e28cbe81#e5e8cae091eb7220cd37837494ece966e28cbe81"
source = "git+https://github.com/revoltchat/quark?rev=e0ac2fe6c1ed4c874bb39cdd119958ee7f8d0c02#e0ac2fe6c1ed4c874bb39cdd119958ee7f8d0c02"
dependencies = [
"async-recursion",
"async-std",

View File

@@ -64,5 +64,5 @@ schemars = "0.8.8"
rocket_okapi = { git = "https://github.com/insertish/okapi", rev = "dcf0df115596ee07a587a7a543cddf3d7944645b", features = [ "swagger" ] }
# quark
revolt-quark = { git = "https://github.com/revoltchat/quark", rev = "e5e8cae091eb7220cd37837494ece966e28cbe81" }
revolt-quark = { git = "https://github.com/revoltchat/quark", rev = "e0ac2fe6c1ed4c874bb39cdd119958ee7f8d0c02" }
# revolt-quark = { path = "../quark" }

View File

@@ -0,0 +1,43 @@
use revolt_quark::{
models::{Message, User},
perms, Db, EmptyResponse, Error, Permission, Ref, Result,
};
use rocket::serde::json::Json;
use serde::Deserialize;
use validator::Validate;
/// # Search Parameters
#[derive(Validate, Deserialize, JsonSchema)]
pub struct OptionsBulkDelete {
/// Message IDs
#[validate(length(min = 1, max = 100))]
ids: Vec<String>,
}
/// # Bulk Delete Messages
///
/// Delete multiple messages you've sent or one you have permission to delete.
///
/// This will always require `ManageMessages` permission regardless of whether you own the message or not.
#[openapi(tag = "Messaging")]
#[delete("/<target>/messages/bulk", data = "<options>", rank = 1)]
pub async fn req(
db: &Db,
user: User,
target: Ref,
options: Json<OptionsBulkDelete>,
) -> Result<EmptyResponse> {
let options = options.into_inner();
options
.validate()
.map_err(|error| Error::FailedValidation { error })?;
perms(&user)
.channel(&target.as_channel(db).await?)
.throw_permission(db, Permission::ManageMessages)
.await?;
Message::bulk_delete(db, &target.id, options.ids)
.await
.map(|_| EmptyResponse)
}

View File

@@ -4,7 +4,7 @@ use revolt_quark::{models::User, perms, Db, EmptyResponse, Error, Permission, Re
///
/// Delete a message you've sent or one you have permission to delete.
#[openapi(tag = "Messaging")]
#[delete("/<target>/messages/<msg>")]
#[delete("/<target>/messages/<msg>", rank = 2)]
pub async fn req(db: &Db, user: User, target: Ref, msg: Ref) -> Result<EmptyResponse> {
let message = msg.as_message(db).await?;
if message.channel != target.id {

View File

@@ -11,7 +11,7 @@ use serde::{Deserialize, Serialize};
use validator::Validate;
/// # Search Parameters
#[derive(Validate, Serialize, Deserialize, JsonSchema, FromForm)]
#[derive(Validate, Serialize, Deserialize, JsonSchema)]
pub struct OptionsMessageSearch {
/// Full-text search query
///

View File

@@ -10,6 +10,7 @@ mod group_create;
mod group_remove_member;
mod invite_create;
mod members_fetch;
mod message_bulk_delete;
mod message_delete;
mod message_edit;
mod message_fetch;
@@ -35,6 +36,7 @@ pub fn routes() -> (Vec<Route>, OpenApi) {
message_query_stale::req,
message_fetch::req,
message_edit::req,
message_bulk_delete::req,
message_delete::req,
group_create::req,
group_add_member::req,