diff --git a/src/catchers/mod.rs b/src/catchers/mod.rs index 08b42e2..f4b84c3 100644 --- a/src/catchers/mod.rs +++ b/src/catchers/mod.rs @@ -23,4 +23,20 @@ pub fn not_found(req: &Request) -> Json { status: 404, message: "Page not found".to_string(), }) +} + +#[catch(500)] +pub fn internal_server_error(req: &Request) -> Json { + Json(ErrorResponse { + status: 500, + message: "Internal Server Error".to_string(), + }) +} + +#[catch(204)] +pub fn no_content(req: &Request) -> Json { + Json(ErrorResponse { + status: 204, + message: "No Content".to_string(), + }) } \ No newline at end of file diff --git a/src/main.rs b/src/main.rs index 97caae6..4860791 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,7 +8,7 @@ mod catchers; mod db; mod schema; -use crate::routes::snack::{create_snack, list_snacks, update_snack}; +use crate::routes::snack::{create_snack, delete_snack, list_snacks, update_snack}; use dotenv::dotenv; use rocket::*; @@ -28,6 +28,7 @@ fn index() -> &'static str { fn rocket() -> _ { dotenv().ok(); - rocket::build().mount("/", routes![index, create_snack, list_snacks, update_snack]).register("/", catchers![catchers::unauthorized, catchers::not_found]) + rocket::build().mount("/", routes![index, create_snack, list_snacks, update_snack, delete_snack]).register("/", catchers![catchers::unauthorized, catchers::not_found, + catchers::no_content, catchers::internal_server_error]) } diff --git a/src/routes/snack.rs b/src/routes/snack.rs index 1beeb87..3fbba49 100644 --- a/src/routes/snack.rs +++ b/src/routes/snack.rs @@ -67,4 +67,21 @@ pub fn update_snack( } }) } +#[delete("/snack/")] +pub fn delete_snack(_api_key: ApiKey, snack_id: i32) -> Status { + let mut conn = db::establish_connection(); + match diesel::delete(snacks.find(snack_id)).execute(&mut conn) { + Ok(count) => { + if count > 0 { + Status::NoContent + } else { + Status::NotFound + } + } + Err(err) => { + println!("Database error: {:?}", err); + Status::InternalServerError + } + } +}