From 14a3559203d3c7ffd12ef3a15160aa9d5c50a77d Mon Sep 17 00:00:00 2001
From: noQils <daffaaqilmahmud@gmail.com>
Date: Thu, 27 Mar 2025 16:12:38 +0700
Subject: [PATCH] Implement unsubscribe function in Notification service.

---
 src/service/notification.rs | 36 ++++++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

diff --git a/src/service/notification.rs b/src/service/notification.rs
index 111589e..c8f3073 100644
--- a/src/service/notification.rs
+++ b/src/service/notification.rs
@@ -54,4 +54,40 @@ impl NotificationService {
             .join().unwrap();
     }
 
+    #[tokio::main]
+    async fn unsubscribe_request(product_type: String) -> Result<SubscriberRequest> {
+        let product_type_upper: String = product_type.to_uppercase();
+        let product_type_str: &str = product_type_upper.as_str();
+        let notification_receiver_url: String = format!("{}/receive",
+            APP_CONFIG.get_instance_root_url());
+        let request_url: String = 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();  
+    }  
+    
 }
-- 
GitLab