From 994a835bd1ece4e79e11e7e12b4422deccd20eaf Mon Sep 17 00:00:00 2001 From: Andrew4Coding <andrewdevitoaryo@gmail.com> Date: Fri, 28 Mar 2025 13:09:38 +0800 Subject: [PATCH] Implement unsubscribe function in Notification service --- src/service/notification.rs | 41 +++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/src/service/notification.rs b/src/service/notification.rs index 6dd7b84..51a24a1 100644 --- a/src/service/notification.rs +++ b/src/service/notification.rs @@ -51,4 +51,45 @@ impl NotificationService { let product_type_clone = String::from(product_type); return thread::spawn(move || Self::subscribe_request(product_type_clone)).join().unwrap(); } + + #[tokio::main] + async fn unsubscribe_request(product_type: String) -> Result<SubscriberRequest> { + let product_type_upper = product_type.to_uppercase(); + let product_type_str = product_type_upper.as_str(); + + let notification_receiver_url = format!("{}/receive", APP_CONFIG.get_instance_root_url()); + + let request_url = format!( + "{}/notification/unsubscribe/{}?url={}", + APP_CONFIG.get_publisher_root_url(), + product_type_str, + notification_receiver_url + ); + let request = REQWEST_CLIENT + .post(request_url.clone()) + .header("Content-Type", "application/json") + .header("Accept", "application/json") + .send() + .await; + + log::warn_!("Sent unsubscribe request to: {}", request_url); + + return match request { + Ok(f) => match f.json::<SubscriberRequest>().await { + Ok(x) => Ok(x), + Err(_y) => Err(compose_error_response( + Status::NotFound, + String::from("Already unsubscribed to the topic."), + )), + }, + Err(e) => Err(compose_error_response(Status::NotFound, e.to_string())), + }; + } + + pub fn unsubscribe(product_type: &str) -> Result<SubscriberRequest> { + let product_type_clone = String::from(product_type); + return thread::spawn(move || Self::unsubscribe_request(product_type_clone)) + .join() + .unwrap(); + } } \ No newline at end of file -- GitLab