instrumentality/routes/groups/
delete.rs1use axum::{http::StatusCode, response::IntoResponse, Json};
9use mongodb::bson::doc;
10use mongodb::Collection;
11use serde::{Deserialize, Serialize};
12
13use crate::database::DBHandle;
14use crate::group::Group;
15use crate::routes::response::ErrorResponse;
16use crate::routes::response::OkResponse;
17use crate::user::User;
18
19#[derive(Debug, Serialize, Deserialize, Clone)]
20pub struct DeleteGroupRequest {
21 pub uuid: String,
22}
23
24pub async fn delete(
26 user: User,
27 mut db: DBHandle,
28 Json(data): Json<DeleteGroupRequest>,
29) -> impl IntoResponse {
30 let req_uuid = user.uuid;
32 let group_coll: Collection<Group> = db.collection("groups");
33 if let Ok(Some(_)) = group_coll
34 .find_one_with_session(
35 doc! {"uuid": &data.uuid, "created_by": &req_uuid},
36 None,
37 &mut db.session,
38 )
39 .await
40 {
41 group_coll
42 .delete_one_with_session(
43 doc! {"uuid": &data.uuid, "created_by": &req_uuid},
44 None,
45 &mut db.session,
46 )
47 .await
48 .unwrap();
49 db.session.commit_transaction().await.unwrap();
50 ok!()
51 } else {
52 error!(
53 BAD_REQUEST,
54 "No such group exists or it was not created by the user with the given key."
55 )
56 }
57}