Skip to main content

backbone_bucket/application/triggers/
file_comment_triggers.rs

1//! FileComment trigger handlers
2//!
3//! Auto-generated by backbone-cli. Do not edit manually.
4
5use 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::FileComment;
12
13pub type FileCommentTriggerEvent      = TriggerEvent;
14pub type FileCommentTriggerContext    = TriggerContext<FileComment>;
15pub type FileCommentTriggerContextMut = TriggerContextMut<FileComment>;
16pub type FileCommentActionExecutor    = ActionExecutor;
17pub type FileCommentTriggerRegistry   = TriggerRegistry<FileComment>;
18pub type FileCommentTriggerHandlerObj =
19    dyn TriggerHandler<TriggerContext<FileComment>, TriggerEvent>;
20
21// Lifecycle trigger handlers
22
23/// AfterCreate handler
24pub struct FileCommentAfterCreateHandler1 {
25    /// Event publisher for emitting domain events
26    pub event_publisher: Option<Arc<crate::domain::event::FileCommentEventPublisher>>,
27    /// Action executor for side effects
28    pub action_executor: Option<Arc<FileCommentActionExecutor>>,
29}
30
31impl FileCommentAfterCreateHandler1 {
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::FileCommentEventPublisher>) -> Self {
40        self.event_publisher = Some(publisher);
41        self
42    }
43
44    pub fn with_action_executor(mut self, executor: Arc<FileCommentActionExecutor>) -> Self {
45        self.action_executor = Some(executor);
46        self
47    }
48}
49
50#[async_trait]
51impl TriggerHandler<FileCommentTriggerContext, FileCommentTriggerEvent> for FileCommentAfterCreateHandler1 {
52    fn events(&self) -> Vec<FileCommentTriggerEvent> {
53        vec![TriggerEvent::AfterCreate]
54    }
55
56    async fn handle(&self, ctx: &FileCommentTriggerContext) -> anyhow::Result<()> {
57        let _ = &ctx; // Mark as used to avoid unused warning
58        tracing::info!("Trigger executed for entity: {:?}", ctx.entity.id);
59        // Emit commentcreatedevent event
60        if let Some(publisher) = &self.event_publisher {
61            publisher.publish_created(ctx.entity.clone(), ctx.user_id.clone()).await?;
62        }
63        // Unknown action type 'if': mentions != null && mentions.length > 0 { notify
64        // Unknown action type 'if': user_id != file.owner_id { notify
65        // Unknown action type 'if': parent_id != null && get_comment
66        Ok(())
67    }
68}
69
70/// AfterCreate handler
71pub struct FileCommentAfterCreateHandler2 {
72    /// Event publisher for emitting domain events
73    pub event_publisher: Option<Arc<crate::domain::event::FileCommentEventPublisher>>,
74    /// Action executor for side effects
75    pub action_executor: Option<Arc<FileCommentActionExecutor>>,
76}
77
78impl FileCommentAfterCreateHandler2 {
79    pub fn new() -> Self {
80        Self {
81            event_publisher: None,
82            action_executor: None,
83        }
84    }
85
86    pub fn with_event_publisher(mut self, publisher: Arc<crate::domain::event::FileCommentEventPublisher>) -> Self {
87        self.event_publisher = Some(publisher);
88        self
89    }
90
91    pub fn with_action_executor(mut self, executor: Arc<FileCommentActionExecutor>) -> Self {
92        self.action_executor = Some(executor);
93        self
94    }
95}
96
97#[async_trait]
98impl TriggerHandler<FileCommentTriggerContext, FileCommentTriggerEvent> for FileCommentAfterCreateHandler2 {
99    fn events(&self) -> Vec<FileCommentTriggerEvent> {
100        vec![TriggerEvent::AfterCreate]
101    }
102
103    async fn handle(&self, ctx: &FileCommentTriggerContext) -> anyhow::Result<()> {
104        let _ = &ctx; // Mark as used to avoid unused warning
105        tracing::info!("Trigger executed for entity: {:?}", ctx.entity.id);
106        Ok(())
107    }
108}
109
110/// AfterDelete handler
111pub struct FileCommentAfterDeleteHandler3 {
112    /// Event publisher for emitting domain events
113    pub event_publisher: Option<Arc<crate::domain::event::FileCommentEventPublisher>>,
114    /// Action executor for side effects
115    pub action_executor: Option<Arc<FileCommentActionExecutor>>,
116}
117
118impl FileCommentAfterDeleteHandler3 {
119    pub fn new() -> Self {
120        Self {
121            event_publisher: None,
122            action_executor: None,
123        }
124    }
125
126    pub fn with_event_publisher(mut self, publisher: Arc<crate::domain::event::FileCommentEventPublisher>) -> Self {
127        self.event_publisher = Some(publisher);
128        self
129    }
130
131    pub fn with_action_executor(mut self, executor: Arc<FileCommentActionExecutor>) -> Self {
132        self.action_executor = Some(executor);
133        self
134    }
135}
136
137#[async_trait]
138impl TriggerHandler<FileCommentTriggerContext, FileCommentTriggerEvent> for FileCommentAfterDeleteHandler3 {
139    fn events(&self) -> Vec<FileCommentTriggerEvent> {
140        vec![TriggerEvent::AfterDelete]
141    }
142
143    async fn handle(&self, ctx: &FileCommentTriggerContext) -> anyhow::Result<()> {
144        let _ = &ctx; // Mark as used to avoid unused warning
145        // Emit commentdeletedevent event
146        if let Some(publisher) = &self.event_publisher {
147            publisher.publish_deleted(ctx.entity.id().to_string(), ctx.user_id.clone()).await?;
148        }
149        tracing::info!("Trigger executed for entity: {:?}", ctx.entity.id);
150        Ok(())
151    }
152}
153
154// State machine trigger handlers
155
156/// Create a default registry pre-populated with all handlers for FileComment.
157pub fn file_comment_trigger_registry() -> FileCommentTriggerRegistry {
158    TriggerRegistry::build(|r| {
159        r.register(Arc::new(FileCommentAfterCreateHandler1::new()));
160        r.register(Arc::new(FileCommentAfterCreateHandler2::new()));
161        r.register(Arc::new(FileCommentAfterDeleteHandler3::new()));
162    })
163}
164