use std::sync::Arc;
use async_trait::async_trait;
use backbone_core::trigger::{
ActionExecutor, TriggerContext, TriggerContextMut, TriggerEvent, TriggerHandler, TriggerRegistry,
};
use crate::domain::entity::FileShare;
pub type FileShareTriggerEvent = TriggerEvent;
pub type FileShareTriggerContext = TriggerContext<FileShare>;
pub type FileShareTriggerContextMut = TriggerContextMut<FileShare>;
pub type FileShareActionExecutor = ActionExecutor;
pub type FileShareTriggerRegistry = TriggerRegistry<FileShare>;
pub type FileShareTriggerHandlerObj =
dyn TriggerHandler<TriggerContext<FileShare>, TriggerEvent>;
pub struct FileShareBeforeCreateHandler1 {
pub event_publisher: Option<Arc<crate::domain::event::FileShareEventPublisher>>,
pub action_executor: Option<Arc<FileShareActionExecutor>>,
}
impl FileShareBeforeCreateHandler1 {
pub fn new() -> Self {
Self {
event_publisher: None,
action_executor: None,
}
}
pub fn with_event_publisher(mut self, publisher: Arc<crate::domain::event::FileShareEventPublisher>) -> Self {
self.event_publisher = Some(publisher);
self
}
pub fn with_action_executor(mut self, executor: Arc<FileShareActionExecutor>) -> Self {
self.action_executor = Some(executor);
self
}
}
#[async_trait]
impl TriggerHandler<FileShareTriggerContext, FileShareTriggerEvent> for FileShareBeforeCreateHandler1 {
fn events(&self) -> Vec<FileShareTriggerEvent> {
vec![TriggerEvent::BeforeCreate]
}
async fn handle(&self, ctx: &FileShareTriggerContext) -> anyhow::Result<()> {
let _ = &ctx; Ok(())
}
}
pub struct FileShareAfterCreateHandler2 {
pub event_publisher: Option<Arc<crate::domain::event::FileShareEventPublisher>>,
pub action_executor: Option<Arc<FileShareActionExecutor>>,
}
impl FileShareAfterCreateHandler2 {
pub fn new() -> Self {
Self {
event_publisher: None,
action_executor: None,
}
}
pub fn with_event_publisher(mut self, publisher: Arc<crate::domain::event::FileShareEventPublisher>) -> Self {
self.event_publisher = Some(publisher);
self
}
pub fn with_action_executor(mut self, executor: Arc<FileShareActionExecutor>) -> Self {
self.action_executor = Some(executor);
self
}
}
#[async_trait]
impl TriggerHandler<FileShareTriggerContext, FileShareTriggerEvent> for FileShareAfterCreateHandler2 {
fn events(&self) -> Vec<FileShareTriggerEvent> {
vec![TriggerEvent::AfterCreate]
}
async fn handle(&self, ctx: &FileShareTriggerContext) -> anyhow::Result<()> {
let _ = &ctx; tracing::info!("Trigger executed for entity: {:?}", ctx.entity.id);
Ok(())
}
}
pub struct FileShareAfterCreateHandler3 {
pub event_publisher: Option<Arc<crate::domain::event::FileShareEventPublisher>>,
pub action_executor: Option<Arc<FileShareActionExecutor>>,
}
impl FileShareAfterCreateHandler3 {
pub fn new() -> Self {
Self {
event_publisher: None,
action_executor: None,
}
}
pub fn with_event_publisher(mut self, publisher: Arc<crate::domain::event::FileShareEventPublisher>) -> Self {
self.event_publisher = Some(publisher);
self
}
pub fn with_action_executor(mut self, executor: Arc<FileShareActionExecutor>) -> Self {
self.action_executor = Some(executor);
self
}
}
#[async_trait]
impl TriggerHandler<FileShareTriggerContext, FileShareTriggerEvent> for FileShareAfterCreateHandler3 {
fn events(&self) -> Vec<FileShareTriggerEvent> {
vec![TriggerEvent::AfterCreate]
}
async fn handle(&self, ctx: &FileShareTriggerContext) -> anyhow::Result<()> {
let _ = &ctx; if let Some(_publisher) = &self.event_publisher {
}
Ok(())
}
}
pub struct FileShareAfterCreateHandler4 {
pub event_publisher: Option<Arc<crate::domain::event::FileShareEventPublisher>>,
pub action_executor: Option<Arc<FileShareActionExecutor>>,
}
impl FileShareAfterCreateHandler4 {
pub fn new() -> Self {
Self {
event_publisher: None,
action_executor: None,
}
}
pub fn with_event_publisher(mut self, publisher: Arc<crate::domain::event::FileShareEventPublisher>) -> Self {
self.event_publisher = Some(publisher);
self
}
pub fn with_action_executor(mut self, executor: Arc<FileShareActionExecutor>) -> Self {
self.action_executor = Some(executor);
self
}
}
#[async_trait]
impl TriggerHandler<FileShareTriggerContext, FileShareTriggerEvent> for FileShareAfterCreateHandler4 {
fn events(&self) -> Vec<FileShareTriggerEvent> {
vec![TriggerEvent::AfterCreate]
}
async fn handle(&self, ctx: &FileShareTriggerContext) -> anyhow::Result<()> {
let _ = &ctx; tracing::info!("Trigger executed for entity: {:?}", ctx.entity.id);
if let Some(_publisher) = &self.event_publisher {
}
Ok(())
}
}
pub struct FileShareAfterDeleteHandler5 {
pub event_publisher: Option<Arc<crate::domain::event::FileShareEventPublisher>>,
pub action_executor: Option<Arc<FileShareActionExecutor>>,
}
impl FileShareAfterDeleteHandler5 {
pub fn new() -> Self {
Self {
event_publisher: None,
action_executor: None,
}
}
pub fn with_event_publisher(mut self, publisher: Arc<crate::domain::event::FileShareEventPublisher>) -> Self {
self.event_publisher = Some(publisher);
self
}
pub fn with_action_executor(mut self, executor: Arc<FileShareActionExecutor>) -> Self {
self.action_executor = Some(executor);
self
}
}
#[async_trait]
impl TriggerHandler<FileShareTriggerContext, FileShareTriggerEvent> for FileShareAfterDeleteHandler5 {
fn events(&self) -> Vec<FileShareTriggerEvent> {
vec![TriggerEvent::AfterDelete]
}
async fn handle(&self, ctx: &FileShareTriggerContext) -> anyhow::Result<()> {
let _ = &ctx; if let Some(publisher) = &self.event_publisher {
publisher.publish_deleted(ctx.entity.id().to_string(), ctx.user_id.clone()).await?;
}
tracing::info!("Trigger executed for entity: {:?}", ctx.entity.id);
Ok(())
}
}
pub struct FileShareOnEnterActiveHandler {
pub event_publisher: Option<Arc<crate::domain::event::FileShareEventPublisher>>,
}
impl FileShareOnEnterActiveHandler {
pub fn new() -> Self {
Self {
event_publisher: None,
}
}
}
#[async_trait]
impl TriggerHandler<FileShareTriggerContext, FileShareTriggerEvent> for FileShareOnEnterActiveHandler {
fn events(&self) -> Vec<FileShareTriggerEvent> {
vec![TriggerEvent::OnEnterState("active".to_string())]
}
async fn handle(&self, ctx: &FileShareTriggerContext) -> anyhow::Result<()> {
let _ = &ctx; if let Some(publisher) = &self.event_publisher {
publisher.publish_created(ctx.entity.clone(), ctx.user_id.clone()).await?;
}
Ok(())
}
}
pub struct FileShareOnEnterInactiveHandler {}
impl FileShareOnEnterInactiveHandler {
pub fn new() -> Self { Self {} }
}
#[async_trait]
impl TriggerHandler<FileShareTriggerContext, FileShareTriggerEvent> for FileShareOnEnterInactiveHandler {
fn events(&self) -> Vec<FileShareTriggerEvent> {
vec![TriggerEvent::OnEnterState("inactive".to_string())]
}
async fn handle(&self, ctx: &FileShareTriggerContext) -> anyhow::Result<()> {
let _ = &ctx; tracing::info!("Trigger executed for entity: {:?}", ctx.entity.id);
Ok(())
}
}
pub struct FileShareOnEnterExpiredHandler {}
impl FileShareOnEnterExpiredHandler {
pub fn new() -> Self { Self {} }
}
#[async_trait]
impl TriggerHandler<FileShareTriggerContext, FileShareTriggerEvent> for FileShareOnEnterExpiredHandler {
fn events(&self) -> Vec<FileShareTriggerEvent> {
vec![TriggerEvent::OnEnterState("expired".to_string())]
}
async fn handle(&self, ctx: &FileShareTriggerContext) -> anyhow::Result<()> {
let _ = &ctx; tracing::info!("Trigger executed for entity: {:?}", ctx.entity.id);
Ok(())
}
}
pub struct FileShareOnEnterExhaustedHandler {
pub event_publisher: Option<Arc<crate::domain::event::FileShareEventPublisher>>,
}
impl FileShareOnEnterExhaustedHandler {
pub fn new() -> Self {
Self {
event_publisher: None,
}
}
}
#[async_trait]
impl TriggerHandler<FileShareTriggerContext, FileShareTriggerEvent> for FileShareOnEnterExhaustedHandler {
fn events(&self) -> Vec<FileShareTriggerEvent> {
vec![TriggerEvent::OnEnterState("exhausted".to_string())]
}
async fn handle(&self, ctx: &FileShareTriggerContext) -> anyhow::Result<()> {
let _ = &ctx; if let Some(_publisher) = &self.event_publisher {
}
tracing::info!("Trigger executed for entity: {:?}", ctx.entity.id);
Ok(())
}
}
pub struct FileShareOnEnterRevokedHandler {
pub event_publisher: Option<Arc<crate::domain::event::FileShareEventPublisher>>,
}
impl FileShareOnEnterRevokedHandler {
pub fn new() -> Self {
Self {
event_publisher: None,
}
}
}
#[async_trait]
impl TriggerHandler<FileShareTriggerContext, FileShareTriggerEvent> for FileShareOnEnterRevokedHandler {
fn events(&self) -> Vec<FileShareTriggerEvent> {
vec![TriggerEvent::OnEnterState("revoked".to_string())]
}
async fn handle(&self, ctx: &FileShareTriggerContext) -> anyhow::Result<()> {
let _ = &ctx; if let Some(_publisher) = &self.event_publisher {
}
tracing::info!("Trigger executed for entity: {:?}", ctx.entity.id);
Ok(())
}
}
pub fn file_share_trigger_registry() -> FileShareTriggerRegistry {
TriggerRegistry::build(|r| {
r.register(Arc::new(FileShareBeforeCreateHandler1::new()));
r.register(Arc::new(FileShareAfterCreateHandler2::new()));
r.register(Arc::new(FileShareAfterCreateHandler3::new()));
r.register(Arc::new(FileShareAfterCreateHandler4::new()));
r.register(Arc::new(FileShareAfterDeleteHandler5::new()));
r.register(Arc::new(FileShareOnEnterActiveHandler::new()));
r.register(Arc::new(FileShareOnEnterInactiveHandler::new()));
r.register(Arc::new(FileShareOnEnterExpiredHandler::new()));
r.register(Arc::new(FileShareOnEnterExhaustedHandler::new()));
r.register(Arc::new(FileShareOnEnterRevokedHandler::new()));
})
}