- Migration 0002_craftvia_domain: 27 Fachtabellen inkl. RLS (enable_tenant_rls) - TENANT_MODELS (db.ts, backup/topology.ts) um alle Fachmodelle ergänzt - moduleGuard liefert DB-autoritative Rechte; ServiceCtx für Domänen-Services - Verträge: Statusmaschine, Events, Nummernkreise, Sichtbarkeits-Scopes, Job-Queues + Worker, KI-Provider-Interfaces, Sync-Envelope - docs/craftvia/ARCHITEKTUR.md mit Lanes, Ownership und DoD Gate: tsc, lint, build, 22/22 Tests grün. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
17 lines
753 B
TypeScript
17 lines
753 B
TypeScript
import type { DomainEvent } from "@/lib/events";
|
|
import type { ServiceCtx } from "@/server/services/context";
|
|
|
|
/**
|
|
* Emit a domain event AFTER the mutation succeeded. Never throws: a failing notification
|
|
* must not roll back business data — failures are logged and surfaced via sync/notification
|
|
* monitoring. Lanes call ONLY this function; the notifications lane owns the handler.
|
|
*/
|
|
export async function emitEvent(ctx: ServiceCtx, event: DomainEvent): Promise<void> {
|
|
try {
|
|
const { handleEvent } = await import("@/server/services/notifications/handle-event");
|
|
await handleEvent(ctx, event);
|
|
} catch (err) {
|
|
console.error(`[events] ${event.type} for ${event.entityType}:${event.entityId} failed:`, (err as Error).message);
|
|
}
|
|
}
|