bpm_engine_runtime/
process_completed_handler.rs1use async_trait::async_trait;
4use bpm_engine_core::{EngineEvent, InstanceState};
5use tracing::info;
6
7use super::handler::{EngineContext, EventHandler};
8
9pub struct ProcessCompletedHandler;
10
11#[async_trait]
12impl EventHandler for ProcessCompletedHandler {
13 async fn handle(&self, event: &EngineEvent, ctx: &mut EngineContext) -> Vec<EngineEvent> {
14 let EngineEvent::ProcessCompleted(p) = event else {
15 return vec![];
16 };
17 let instance_id = &p.instance_id;
18 if let Some(process_store) = ctx.process_store.as_ref() {
19 if let Ok(Some(mut instance)) = process_store.load(instance_id).await {
20 instance.state = InstanceState::Completed;
21 let _ = process_store.save(&instance).await;
22 }
23 }
24 info!(instance_id = %instance_id, "process completed");
25 vec![]
26 }
27}