feat(core): implement event outbox persistence

Add domain_events migration and SeaORM entity. Modify EventBus::publish
to persist events before broadcasting (best-effort: DB failure logs
warning but still broadcasts in-memory). Update all 19 publish call
sites across 4 crates to pass db reference.

Add outbox relay background task that polls pending events every 5s
and re-broadcasts them, ensuring no events are lost on server restart.
This commit is contained in:
iven
2026-04-12 00:10:49 +08:00
parent 529d90ff46
commit 685df5e458
23 changed files with 235 additions and 31 deletions

View File

@@ -94,7 +94,7 @@ impl UserService {
"user.created",
tenant_id,
serde_json::json!({ "user_id": user_id, "username": req.username }),
));
), db).await;
audit_service::record(
AuditLog::new(tenant_id, Some(operator_id), "user.create", "user")
@@ -265,7 +265,7 @@ impl UserService {
"user.deleted",
tenant_id,
serde_json::json!({ "user_id": id }),
));
), db).await;
audit_service::record(
AuditLog::new(tenant_id, Some(operator_id), "user.delete", "user")