use async_trait::async_trait;
use bpm_engine_core::EngineEvent;
use bpm_engine_storage::{
CompensationRecordRepo, ExternalTaskStore, HistoryRepo, OutboxRepo, ParallelJoinRepo,
ProcessDefinitionStore, ProcessInstanceStore, TimerStore, TokenStore,
};
use std::sync::Arc;
#[async_trait]
pub trait EventHandler: Send + Sync {
async fn handle(&self, event: &EngineEvent, ctx: &mut EngineContext) -> Vec<EngineEvent>;
}
#[derive(Default)]
pub struct EngineContext {
pub process_store: Option<Arc<dyn ProcessInstanceStore>>,
pub token_store: Option<Arc<dyn TokenStore>>,
pub process_def_store: Option<Arc<dyn ProcessDefinitionStore>>,
pub parallel_join_repo: Option<Arc<dyn ParallelJoinRepo>>,
pub timer_store: Option<Arc<dyn TimerStore>>,
pub compensation_repo: Option<Arc<dyn CompensationRecordRepo>>,
pub outbox_repo: Option<Arc<dyn OutboxRepo>>,
pub external_task_store: Option<Arc<dyn ExternalTaskStore>>,
pub history_repo: Option<Arc<dyn HistoryRepo>>,
pub tenant_id: Option<String>,
}