backbone_bucket/application/triggers/
processing_job_triggers.rs1use std::sync::Arc;
6use async_trait::async_trait;
7use backbone_core::trigger::{
8 ActionExecutor, TriggerContext, TriggerContextMut, TriggerEvent, TriggerHandler, TriggerRegistry,
9};
10
11use crate::domain::entity::ProcessingJob;
12
13pub type ProcessingJobTriggerEvent = TriggerEvent;
14pub type ProcessingJobTriggerContext = TriggerContext<ProcessingJob>;
15pub type ProcessingJobTriggerContextMut = TriggerContextMut<ProcessingJob>;
16pub type ProcessingJobActionExecutor = ActionExecutor;
17pub type ProcessingJobTriggerRegistry = TriggerRegistry<ProcessingJob>;
18pub type ProcessingJobTriggerHandlerObj =
19 dyn TriggerHandler<TriggerContext<ProcessingJob>, TriggerEvent>;
20
21pub struct ProcessingJobAfterCreateHandler1 {
25 pub event_publisher: Option<Arc<crate::domain::event::ProcessingJobEventPublisher>>,
27 pub action_executor: Option<Arc<ProcessingJobActionExecutor>>,
29}
30
31impl ProcessingJobAfterCreateHandler1 {
32 pub fn new() -> Self {
33 Self {
34 event_publisher: None,
35 action_executor: None,
36 }
37 }
38
39 pub fn with_event_publisher(mut self, publisher: Arc<crate::domain::event::ProcessingJobEventPublisher>) -> Self {
40 self.event_publisher = Some(publisher);
41 self
42 }
43
44 pub fn with_action_executor(mut self, executor: Arc<ProcessingJobActionExecutor>) -> Self {
45 self.action_executor = Some(executor);
46 self
47 }
48}
49
50#[async_trait]
51impl TriggerHandler<ProcessingJobTriggerContext, ProcessingJobTriggerEvent> for ProcessingJobAfterCreateHandler1 {
52 fn events(&self) -> Vec<ProcessingJobTriggerEvent> {
53 vec![TriggerEvent::AfterCreate]
54 }
55
56 async fn handle(&self, ctx: &ProcessingJobTriggerContext) -> anyhow::Result<()> {
57 let _ = &ctx; tracing::info!("Trigger executed for entity: {:?}", ctx.entity.id);
59 if let Some(publisher) = &self.event_publisher {
61 publisher.publish_created(ctx.entity.clone(), ctx.user_id.clone()).await?;
62 }
63 Ok(())
64 }
65}
66
67pub struct ProcessingJobAfterCreateHandler2 {
69 pub event_publisher: Option<Arc<crate::domain::event::ProcessingJobEventPublisher>>,
71 pub action_executor: Option<Arc<ProcessingJobActionExecutor>>,
73}
74
75impl ProcessingJobAfterCreateHandler2 {
76 pub fn new() -> Self {
77 Self {
78 event_publisher: None,
79 action_executor: None,
80 }
81 }
82
83 pub fn with_event_publisher(mut self, publisher: Arc<crate::domain::event::ProcessingJobEventPublisher>) -> Self {
84 self.event_publisher = Some(publisher);
85 self
86 }
87
88 pub fn with_action_executor(mut self, executor: Arc<ProcessingJobActionExecutor>) -> Self {
89 self.action_executor = Some(executor);
90 self
91 }
92}
93
94#[async_trait]
95impl TriggerHandler<ProcessingJobTriggerContext, ProcessingJobTriggerEvent> for ProcessingJobAfterCreateHandler2 {
96 fn events(&self) -> Vec<ProcessingJobTriggerEvent> {
97 vec![TriggerEvent::AfterCreate]
98 }
99
100 async fn handle(&self, ctx: &ProcessingJobTriggerContext) -> anyhow::Result<()> {
101 let _ = &ctx; tracing::info!("Trigger executed for entity: {:?}", ctx.entity.id);
103 Ok(())
104 }
105}
106
107pub struct ProcessingJobAfterCreateHandler3 {
109 pub event_publisher: Option<Arc<crate::domain::event::ProcessingJobEventPublisher>>,
111 pub action_executor: Option<Arc<ProcessingJobActionExecutor>>,
113}
114
115impl ProcessingJobAfterCreateHandler3 {
116 pub fn new() -> Self {
117 Self {
118 event_publisher: None,
119 action_executor: None,
120 }
121 }
122
123 pub fn with_event_publisher(mut self, publisher: Arc<crate::domain::event::ProcessingJobEventPublisher>) -> Self {
124 self.event_publisher = Some(publisher);
125 self
126 }
127
128 pub fn with_action_executor(mut self, executor: Arc<ProcessingJobActionExecutor>) -> Self {
129 self.action_executor = Some(executor);
130 self
131 }
132}
133
134#[async_trait]
135impl TriggerHandler<ProcessingJobTriggerContext, ProcessingJobTriggerEvent> for ProcessingJobAfterCreateHandler3 {
136 fn events(&self) -> Vec<ProcessingJobTriggerEvent> {
137 vec![TriggerEvent::AfterCreate]
138 }
139
140 async fn handle(&self, ctx: &ProcessingJobTriggerContext) -> anyhow::Result<()> {
141 let _ = &ctx; Ok(())
144 }
145}
146
147pub struct ProcessingJobAfterCreateHandler4 {
149 pub event_publisher: Option<Arc<crate::domain::event::ProcessingJobEventPublisher>>,
151 pub action_executor: Option<Arc<ProcessingJobActionExecutor>>,
153}
154
155impl ProcessingJobAfterCreateHandler4 {
156 pub fn new() -> Self {
157 Self {
158 event_publisher: None,
159 action_executor: None,
160 }
161 }
162
163 pub fn with_event_publisher(mut self, publisher: Arc<crate::domain::event::ProcessingJobEventPublisher>) -> Self {
164 self.event_publisher = Some(publisher);
165 self
166 }
167
168 pub fn with_action_executor(mut self, executor: Arc<ProcessingJobActionExecutor>) -> Self {
169 self.action_executor = Some(executor);
170 self
171 }
172}
173
174#[async_trait]
175impl TriggerHandler<ProcessingJobTriggerContext, ProcessingJobTriggerEvent> for ProcessingJobAfterCreateHandler4 {
176 fn events(&self) -> Vec<ProcessingJobTriggerEvent> {
177 vec![TriggerEvent::AfterCreate]
178 }
179
180 async fn handle(&self, ctx: &ProcessingJobTriggerContext) -> anyhow::Result<()> {
181 let _ = &ctx; Ok(())
185 }
186}
187
188pub struct ProcessingJobAfterCreateHandler5 {
190 pub event_publisher: Option<Arc<crate::domain::event::ProcessingJobEventPublisher>>,
192 pub action_executor: Option<Arc<ProcessingJobActionExecutor>>,
194}
195
196impl ProcessingJobAfterCreateHandler5 {
197 pub fn new() -> Self {
198 Self {
199 event_publisher: None,
200 action_executor: None,
201 }
202 }
203
204 pub fn with_event_publisher(mut self, publisher: Arc<crate::domain::event::ProcessingJobEventPublisher>) -> Self {
205 self.event_publisher = Some(publisher);
206 self
207 }
208
209 pub fn with_action_executor(mut self, executor: Arc<ProcessingJobActionExecutor>) -> Self {
210 self.action_executor = Some(executor);
211 self
212 }
213}
214
215#[async_trait]
216impl TriggerHandler<ProcessingJobTriggerContext, ProcessingJobTriggerEvent> for ProcessingJobAfterCreateHandler5 {
217 fn events(&self) -> Vec<ProcessingJobTriggerEvent> {
218 vec![TriggerEvent::AfterCreate]
219 }
220
221 async fn handle(&self, ctx: &ProcessingJobTriggerContext) -> anyhow::Result<()> {
222 let _ = &ctx; Ok(())
225 }
226}
227
228pub struct ProcessingJobOnEnterPendingHandler {}
232
233impl ProcessingJobOnEnterPendingHandler {
234 pub fn new() -> Self { Self {} }
235}
236
237#[async_trait]
238impl TriggerHandler<ProcessingJobTriggerContext, ProcessingJobTriggerEvent> for ProcessingJobOnEnterPendingHandler {
239 fn events(&self) -> Vec<ProcessingJobTriggerEvent> {
240 vec![TriggerEvent::OnEnterState("pending".to_string())]
241 }
242
243 async fn handle(&self, ctx: &ProcessingJobTriggerContext) -> anyhow::Result<()> {
244 let _ = &ctx; tracing::info!("Trigger executed for entity: {:?}", ctx.entity.id);
246 Ok(())
247 }
248}
249
250pub struct ProcessingJobOnEnterRunningHandler {
252 pub event_publisher: Option<Arc<crate::domain::event::ProcessingJobEventPublisher>>,
253}
254
255impl ProcessingJobOnEnterRunningHandler {
256 pub fn new() -> Self {
257 Self {
258 event_publisher: None,
259 }
260 }
261}
262
263#[async_trait]
264impl TriggerHandler<ProcessingJobTriggerContext, ProcessingJobTriggerEvent> for ProcessingJobOnEnterRunningHandler {
265 fn events(&self) -> Vec<ProcessingJobTriggerEvent> {
266 vec![TriggerEvent::OnEnterState("running".to_string())]
267 }
268
269 async fn handle(&self, ctx: &ProcessingJobTriggerContext) -> anyhow::Result<()> {
270 let _ = &ctx; if let Some(_publisher) = &self.event_publisher {
276 }
278 Ok(())
279 }
280}
281
282pub struct ProcessingJobOnEnterCompletedHandler {
284 pub event_publisher: Option<Arc<crate::domain::event::ProcessingJobEventPublisher>>,
285}
286
287impl ProcessingJobOnEnterCompletedHandler {
288 pub fn new() -> Self {
289 Self {
290 event_publisher: None,
291 }
292 }
293}
294
295#[async_trait]
296impl TriggerHandler<ProcessingJobTriggerContext, ProcessingJobTriggerEvent> for ProcessingJobOnEnterCompletedHandler {
297 fn events(&self) -> Vec<ProcessingJobTriggerEvent> {
298 vec![TriggerEvent::OnEnterState("completed".to_string())]
299 }
300
301 async fn handle(&self, ctx: &ProcessingJobTriggerContext) -> anyhow::Result<()> {
302 let _ = &ctx; if let Some(_publisher) = &self.event_publisher {
308 }
310 tracing::info!("Trigger executed for entity: {:?}", ctx.entity.id);
311 Ok(())
312 }
313}
314
315pub struct ProcessingJobOnEnterFailedHandler {
317 pub event_publisher: Option<Arc<crate::domain::event::ProcessingJobEventPublisher>>,
318}
319
320impl ProcessingJobOnEnterFailedHandler {
321 pub fn new() -> Self {
322 Self {
323 event_publisher: None,
324 }
325 }
326}
327
328#[async_trait]
329impl TriggerHandler<ProcessingJobTriggerContext, ProcessingJobTriggerEvent> for ProcessingJobOnEnterFailedHandler {
330 fn events(&self) -> Vec<ProcessingJobTriggerEvent> {
331 vec![TriggerEvent::OnEnterState("failed".to_string())]
332 }
333
334 async fn handle(&self, ctx: &ProcessingJobTriggerContext) -> anyhow::Result<()> {
335 let _ = &ctx; if let Some(_publisher) = &self.event_publisher {
341 }
343 tracing::info!("Trigger executed for entity: {:?}", ctx.entity.id);
344 Ok(())
345 }
346}
347
348pub struct ProcessingJobOnEnterCancelledHandler {
350 pub event_publisher: Option<Arc<crate::domain::event::ProcessingJobEventPublisher>>,
351}
352
353impl ProcessingJobOnEnterCancelledHandler {
354 pub fn new() -> Self {
355 Self {
356 event_publisher: None,
357 }
358 }
359}
360
361#[async_trait]
362impl TriggerHandler<ProcessingJobTriggerContext, ProcessingJobTriggerEvent> for ProcessingJobOnEnterCancelledHandler {
363 fn events(&self) -> Vec<ProcessingJobTriggerEvent> {
364 vec![TriggerEvent::OnEnterState("cancelled".to_string())]
365 }
366
367 async fn handle(&self, ctx: &ProcessingJobTriggerContext) -> anyhow::Result<()> {
368 let _ = &ctx; if let Some(_publisher) = &self.event_publisher {
374 }
376 tracing::info!("Trigger executed for entity: {:?}", ctx.entity.id);
377 Ok(())
378 }
379}
380
381pub fn processing_job_trigger_registry() -> ProcessingJobTriggerRegistry {
383 TriggerRegistry::build(|r| {
384 r.register(Arc::new(ProcessingJobAfterCreateHandler1::new()));
385 r.register(Arc::new(ProcessingJobAfterCreateHandler2::new()));
386 r.register(Arc::new(ProcessingJobAfterCreateHandler3::new()));
387 r.register(Arc::new(ProcessingJobAfterCreateHandler4::new()));
388 r.register(Arc::new(ProcessingJobAfterCreateHandler5::new()));
389 r.register(Arc::new(ProcessingJobOnEnterPendingHandler::new()));
390 r.register(Arc::new(ProcessingJobOnEnterRunningHandler::new()));
391 r.register(Arc::new(ProcessingJobOnEnterCompletedHandler::new()));
392 r.register(Arc::new(ProcessingJobOnEnterFailedHandler::new()));
393 r.register(Arc::new(ProcessingJobOnEnterCancelledHandler::new()));
394 })
395}
396