diff --git a/src/service/notification.rs b/src/service/notification.rs index 04ee35824b9c7d8bbc98c5fecbf6536c84b7cb58..bbac6eff61263657e9fbd7864ae254f19efeed42 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