forked from jmug/stoatchat
feat: bulk message delete
This commit is contained in:
2
Cargo.lock
generated
2
Cargo.lock
generated
@@ -2999,7 +2999,7 @@ dependencies = [
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "revolt-quark"
|
name = "revolt-quark"
|
||||||
version = "0.1.0"
|
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 = [
|
dependencies = [
|
||||||
"async-recursion",
|
"async-recursion",
|
||||||
"async-std",
|
"async-std",
|
||||||
|
|||||||
@@ -64,5 +64,5 @@ schemars = "0.8.8"
|
|||||||
rocket_okapi = { git = "https://github.com/insertish/okapi", rev = "dcf0df115596ee07a587a7a543cddf3d7944645b", features = [ "swagger" ] }
|
rocket_okapi = { git = "https://github.com/insertish/okapi", rev = "dcf0df115596ee07a587a7a543cddf3d7944645b", features = [ "swagger" ] }
|
||||||
|
|
||||||
# quark
|
# 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" }
|
# revolt-quark = { path = "../quark" }
|
||||||
|
|||||||
43
src/routes/channels/message_bulk_delete.rs
Normal file
43
src/routes/channels/message_bulk_delete.rs
Normal 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)
|
||||||
|
}
|
||||||
@@ -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.
|
/// Delete a message you've sent or one you have permission to delete.
|
||||||
#[openapi(tag = "Messaging")]
|
#[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> {
|
pub async fn req(db: &Db, user: User, target: Ref, msg: Ref) -> Result<EmptyResponse> {
|
||||||
let message = msg.as_message(db).await?;
|
let message = msg.as_message(db).await?;
|
||||||
if message.channel != target.id {
|
if message.channel != target.id {
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ use serde::{Deserialize, Serialize};
|
|||||||
use validator::Validate;
|
use validator::Validate;
|
||||||
|
|
||||||
/// # Search Parameters
|
/// # Search Parameters
|
||||||
#[derive(Validate, Serialize, Deserialize, JsonSchema, FromForm)]
|
#[derive(Validate, Serialize, Deserialize, JsonSchema)]
|
||||||
pub struct OptionsMessageSearch {
|
pub struct OptionsMessageSearch {
|
||||||
/// Full-text search query
|
/// Full-text search query
|
||||||
///
|
///
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ mod group_create;
|
|||||||
mod group_remove_member;
|
mod group_remove_member;
|
||||||
mod invite_create;
|
mod invite_create;
|
||||||
mod members_fetch;
|
mod members_fetch;
|
||||||
|
mod message_bulk_delete;
|
||||||
mod message_delete;
|
mod message_delete;
|
||||||
mod message_edit;
|
mod message_edit;
|
||||||
mod message_fetch;
|
mod message_fetch;
|
||||||
@@ -35,6 +36,7 @@ pub fn routes() -> (Vec<Route>, OpenApi) {
|
|||||||
message_query_stale::req,
|
message_query_stale::req,
|
||||||
message_fetch::req,
|
message_fetch::req,
|
||||||
message_edit::req,
|
message_edit::req,
|
||||||
|
message_bulk_delete::req,
|
||||||
message_delete::req,
|
message_delete::req,
|
||||||
group_create::req,
|
group_create::req,
|
||||||
group_add_member::req,
|
group_add_member::req,
|
||||||
|
|||||||
Reference in New Issue
Block a user