From ebe25025019b2b5f64038a0d0c3b1b488c9d9813 Mon Sep 17 00:00:00 2001
From: Andrew4Coding <andrewdevitoaryo@gmail.com>
Date: Fri, 28 Mar 2025 11:20:37 +0800
Subject: [PATCH] Implement notify function in Notification service to notify
 each Subscriber.

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

diff --git a/src/service/notification.rs b/src/service/notification.rs
index 04ee358..bbac6ef 100644
--- a/src/service/notification.rs
+++ b/src/service/notification.rs
@@ -1,7 +1,9 @@
+use std::thread;
+
 use bambangshop::{compose_error_response, Result};
 use rocket::http::Status;
 
-use crate::{model::subscriber::Subscriber, repository::subscriber::SubscriberRepository};
+use crate::{model::{notification::Notification, product::Product, subscriber::Subscriber}, repository::subscriber::SubscriberRepository};
 
 pub struct NotificationService;
 
@@ -25,4 +27,23 @@ impl NotificationService {
 
         return Ok(result.unwrap());
     }
+
+    pub fn notify(&self, product_type: &str, status: &str, product: Product) {
+        let mut payload = Notification {
+            product_title: product.clone().title,
+            product_type: String::from(product_type),
+            product_url: product.clone().get_url(),
+            subscriber_name: String::from(""),
+            status: String::from(status),
+        };
+
+        let subscribers = SubscriberRepository::list_all(product_type);
+        for subscriber in subscribers {
+            payload.subscriber_name = subscriber.clone().name;
+            let subscriber_clone = subscriber.clone();
+            let payload_clone = payload.clone();
+
+            thread::spawn(move || subscriber_clone.update(payload_clone));
+        }
+    }
 }
\ No newline at end of file
-- 
GitLab