Explorar o código

Create route to delete a transaction.

Lee Morgan hai 11 meses
pai
achega
bc346aca9c

+ 19 - 0
bruno/Suma/Transaction/Delete.bru

@@ -0,0 +1,19 @@
+meta {
+  name: Delete
+  type: http
+  seq: 5
+}
+
+delete {
+  url: http://localhost:8000/api/transaction/:id
+  body: none
+  auth: inherit
+}
+
+params:path {
+  id: 
+}
+
+settings {
+  encodeUrl: true
+}

+ 24 - 1
src/controllers/transaction.rs

@@ -1,4 +1,4 @@
-use actix_web::{web, post, put, HttpResponse, HttpRequest};
+use actix_web::{web, post, put, delete, HttpResponse, HttpRequest};
 use mongodb::Database;
 use bson::oid::ObjectId;
 
@@ -7,6 +7,7 @@ use crate::models::account::Account;
 use crate::app_error::AppError;
 use crate::auth::user_auth;
 use crate::dto::transaction::{CreateInput, SearchInput, UpdateInput};
+use serde_json::json;
 
 #[post("/api/transaction")]
 pub async fn create_route(
@@ -78,3 +79,25 @@ pub async fn update_route(
 
     Ok(HttpResponse::Ok().json(transaction.response()))
 }
+
+#[delete("/api/transaction/{transaction_id}")]
+pub async fn delete_route(
+    db: web::Data<Database>,
+    request: HttpRequest,
+    transaction_id: web::Path<String>
+) -> Result<HttpResponse, AppError> {
+    let user = user_auth(&db, &request).await?;
+    let transaction_collection = db.collection::<Transaction>("transactions");
+
+    let object_id = ObjectId::parse_str(&transaction_id.into_inner())?;
+    Transaction::user_owns(
+        &transaction_collection,
+        &db.collection::<Account>("accounts"),
+        object_id,
+        user
+    ).await?;
+
+    Transaction::delete(&transaction_collection, object_id).await?;
+
+    Ok(HttpResponse::Ok().json(json!({"success": true})))
+}

+ 4 - 0
src/models/transaction.rs

@@ -122,6 +122,10 @@ impl Transaction {
         }
     }
 
+    pub async fn delete(collection: &Collection<Transaction>, id: ObjectId) -> Result<(), AppError> {
+        collection.delete_one(doc!{"_id": id}).await?;
+        Ok(())
+    }
 
     pub fn response(self) -> ResponseTransaction {
         ResponseTransaction {

+ 3 - 1
src/routes/transaction.rs

@@ -3,11 +3,13 @@ use actix_web::web;
 use crate::controllers::transaction::{
     create_route,
     get_many_route,
-    update_route
+    update_route,
+    delete_route
 };
 
 pub fn config(cfg: &mut web::ServiceConfig) {
     cfg.service(create_route);
     cfg.service(get_many_route);
     cfg.service(update_route);
+    cfg.service(delete_route);
 }