From 8433255e486b67e3c37aa5d85d4ebf450e59abb7 Mon Sep 17 00:00:00 2001 From: asShidqi <fayyed76@gmail.com> Date: Fri, 28 Mar 2025 20:40:29 +0700 Subject: [PATCH] Implement publish function in Program service and Program controller. --- src/controller/mod.rs | 2 +- src/controller/product.rs | 8 ++++++++ src/service/product.rs | 18 ++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/src/controller/mod.rs b/src/controller/mod.rs index f005f33..ab9de49 100644 --- a/src/controller/mod.rs +++ b/src/controller/mod.rs @@ -6,7 +6,7 @@ use rocket::fairing::AdHoc; pub fn route_stage() -> AdHoc { return AdHoc::on_ignite("Initializing controller routes...", |rocket| async { rocket - .mount("/product", routes![product::create, product::list, product::read, product::delete]) + .mount("/product", routes![product::create, product::list, product::read, product::delete, product::publish]) .mount("notification", routes![notification::subscribe,notification::unsubscribe]) }); } diff --git a/src/controller/product.rs b/src/controller/product.rs index 1cc5384..7e54ba0 100644 --- a/src/controller/product.rs +++ b/src/controller/product.rs @@ -37,3 +37,11 @@ pub fn delete(id: usize) -> Result<Json<Product>> { Err(e) => Err(e) }; } + +#[post("/<id>/publish")] +pub fn publish(id: usize) -> Result<Json<Product>> { + match ProductService::publish(id) { + Ok(f) => Ok(Json::from(f)), + Err(e) => Err(e) + } +} diff --git a/src/service/product.rs b/src/service/product.rs index 775bf09..f161b4d 100644 --- a/src/service/product.rs +++ b/src/service/product.rs @@ -42,4 +42,22 @@ impl ProductService { return Ok(Json::from(product)); } + + pub fn publish(id: usize) -> Result<Product> { + let product_opt: Option<Product> = ProductRepository::get_by_id(id); + + if product_opt.is_none() { + return Err(compose_error_response( + Status::NotFound, + String::from("Product not found.") + )); + } + + let product: Product = product_opt.unwrap(); + + NotificationService.notify(&product.product_type, "PROMOTION", product.clone()); + + return Ok(product); + } + } -- GitLab