Files
stoatchat/crates/delta/src/routes/servers/server_delete.rs

36 lines
938 B
Rust

use revolt_database::{util::reference::Reference, Database, RemovalIntention, User};
use revolt_models::v0;
use revolt_result::Result;
use rocket::State;
use rocket_empty::EmptyResponse;
/// # Delete / Leave Server
///
/// Deletes a server if owner otherwise leaves.
#[openapi(tag = "Server Information")]
#[delete("/<target>?<options..>")]
pub async fn delete(
db: &State<Database>,
user: User,
target: Reference<'_>,
options: v0::OptionsServerDelete,
) -> Result<EmptyResponse> {
let server = target.as_server(db).await?;
let member = db.fetch_member(target.id, &user.id).await?;
if server.owner == user.id {
server.delete(db).await
} else {
member
.remove(
db,
&server,
RemovalIntention::Leave,
options.leave_silently.unwrap_or_default(),
)
.await
}
.map(|_| EmptyResponse)
}