diff --git a/server/src/api/v1.rs b/server/src/api/v1.rs index 8433f7e..e9ed242 100644 --- a/server/src/api/v1.rs +++ b/server/src/api/v1.rs @@ -1,4 +1,4 @@ -use actix_web::{get, HttpResponse, post, Responder, web}; +use actix_web::{delete, get, HttpResponse, post, Responder, web}; use chrono::NaiveDateTime; use serde::Deserialize; use uuid::Uuid; @@ -10,7 +10,8 @@ pub fn configure(cfg: &mut web::ServiceConfig) { let scope = web::scope("/v1") .service(get_task) .service(get_tasks) - .service(create_task); + .service(create_task) + .service(delete_task); cfg.service(scope); } @@ -63,3 +64,19 @@ pub async fn create_task(data: web::Data, task: web::Json) - HttpResponse::Ok().json(new_task) } + +#[delete("/delete_task/{uuid}")] +pub async fn delete_task(data: web::Data, path: web::Path) -> impl Responder { + let uuid = path.into_inner(); + + let result = match db::delete_task(data.database_url.clone(), uuid).await { + Ok(result) => result, + Err(e) => return HttpResponse::InternalServerError().body(e.to_string()), + }; + + if result > 0 { + HttpResponse::Ok().body(uuid.to_string()) + } else { + HttpResponse::NotFound().body("Unable to delete. Not found.") + } +} diff --git a/server/src/db/mod.rs b/server/src/db/mod.rs index 8529bf8..ef13ae7 100644 --- a/server/src/db/mod.rs +++ b/server/src/db/mod.rs @@ -33,19 +33,18 @@ pub fn run_migrations( } pub async fn get_tasks(database_url: String) -> Result, Box> { - use crate::schema::tasks::dsl::*; - let conn = &mut establish_connection(&database_url)?; - Ok(tasks.select(Task::as_select()).load(conn)?) + Ok(tasks::dsl::tasks.select(Task::as_select()).load(conn)?) } pub async fn get_task(database_url: String, uuid: Uuid) -> Result> { - use crate::schema::tasks::dsl::*; - let conn = &mut establish_connection(&database_url)?; - Ok(tasks.filter(id.eq(uuid)).first(conn)?) + Ok(tasks::dsl::tasks + .find(uuid) + .select(Task::as_select()) + .first(conn)?) } pub async fn create_task( @@ -69,3 +68,9 @@ pub async fn create_task( .returning(Task::as_returning()) .get_result(conn)?) } + +pub async fn delete_task(database_url: String, uuid: Uuid) -> Result> { + let conn = &mut establish_connection(&database_url)?; + + Ok(diesel::delete(tasks::dsl::tasks.filter(tasks::dsl::id.eq(uuid))).execute(conn)?) +}