TorbatYar/docs/architecture/event-driven-architecture.md
Mortezakoohjani 12c8615615 Ship enterprise Accounting FE/API with CRUD parity and production wiring.
Adds accounting-service PATCH/archive, fiscal helpers, COA templates and setup status, plus SuperApp Accounting UI (DS, scoreboard, masters, vouchers, ledger, ops modules) with session refresh and HTTPS public API URLs.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-24 15:26:43 +03:30

1.1 KiB

Event-Driven Architecture

Envelope

All events use shared.events.EventEnvelope:

{
  "event_id": "uuid",
  "event_type": "tenant.created",
  "aggregate_type": "tenant",
  "aggregate_id": "uuid",
  "tenant_id": "uuid|null",
  "source_service": "core-service",
  "payload": {},
  "occurred_at": "ISO-8601"
}

Outbox → Inbox (ADR-006)

  1. Producer writes business row + outbox_events in one transaction.
  2. Worker (process_outbox_events) publishes pending rows.
  3. Consumer inserts inbox_events keyed by event_id (idempotency) then handles payload.

Naming

{aggregate}.{past_tense_verb} — e.g. tenant.created, subscription.updated, user.registered.

Catalog

Canonical list → event-catalog.md

Future

Replace in-process/Celery-only publish with a real message bus without changing envelope or outbox ownership.