diff --git a/src/api/v1/item.rs b/src/api/v1/item.rs index 8e584b5..e7c07c8 100644 --- a/src/api/v1/item.rs +++ b/src/api/v1/item.rs @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: AGPL-3.0-or-later -use actix_web::{error, get, post, put, web, HttpResponse, Responder}; +use actix_web::{delete, error, get, post, put, web, HttpResponse, Responder}; use uuid::Uuid; use crate::manage; @@ -14,6 +14,7 @@ pub fn config(cfg: &mut web::ServiceConfig) { .service(list) .service(show) .service(update) + .service(delete) .service(parents); } @@ -72,6 +73,20 @@ async fn update( Ok(HttpResponse::Ok().json(item)) } +#[delete("/item/{id}")] +async fn delete( + pool: web::Data, + path: web::Path, +) -> actix_web::Result { + let id = path.into_inner(); + + web::block(move || manage::item::delete(&mut pool.get().unwrap(), id)) + .await? + .map_err(error::ErrorInternalServerError)?; + + Ok(HttpResponse::Ok()) +} + #[get("/item/{id}/parents")] async fn parents( pool: web::Data, diff --git a/src/api/v1/item_class.rs b/src/api/v1/item_class.rs index 4756efd..64fb9ec 100644 --- a/src/api/v1/item_class.rs +++ b/src/api/v1/item_class.rs @@ -2,7 +2,7 @@ // // SPDX-License-Identifier: AGPL-3.0-or-later -use actix_web::{error, get, post, put, web, HttpResponse, Responder}; +use actix_web::{delete, error, get, post, put, web, HttpResponse, Responder}; use uuid::Uuid; use crate::manage; @@ -14,7 +14,8 @@ pub fn config(cfg: &mut web::ServiceConfig) { .service(list) .service(show) .service(items) - .service(update); + .service(update) + .service(delete); } #[put("/item-class")] @@ -81,3 +82,17 @@ async fn update( Ok(HttpResponse::Ok().json(item_class)) } + +#[delete("/item-class/{id}")] +async fn delete( + pool: web::Data, + path: web::Path, +) -> actix_web::Result { + let id = path.into_inner(); + + web::block(move || manage::item_class::delete(&mut pool.get().unwrap(), id)) + .await? + .map_err(error::ErrorInternalServerError)?; + + Ok(HttpResponse::Ok()) +} diff --git a/src/manage/item.rs b/src/manage/item.rs index ecb092a..5ddda42 100644 --- a/src/manage/item.rs +++ b/src/manage/item.rs @@ -39,6 +39,13 @@ pub fn update( .get_result(conn) } +pub fn delete(conn: &mut PgConnection, id: Uuid) -> Result<(), diesel::result::Error> { + let num_deleted = + diesel::delete(schema::items::table.filter(schema::items::id.eq(id))).execute(conn)?; + assert_eq!(num_deleted, 1); + Ok(()) +} + /// Helper type for querying parents of items #[derive(Debug, Queryable, Selectable)] #[diesel(table_name = schema::item_tree)] diff --git a/src/manage/item_class.rs b/src/manage/item_class.rs index d2950fb..12017d3 100644 --- a/src/manage/item_class.rs +++ b/src/manage/item_class.rs @@ -59,3 +59,11 @@ pub fn items(conn: &mut PgConnection, id: Uuid) -> Result, diesel::res .select(Item::as_select()) .load(conn) } + +pub fn delete(conn: &mut PgConnection, id: Uuid) -> Result<(), diesel::result::Error> { + let num_deleted = + diesel::delete(schema::item_classes::table.filter(schema::item_classes::id.eq(id))) + .execute(conn)?; + assert_eq!(num_deleted, 1); + Ok(()) +}