krona-staff/docs/ARCHITECTURE.md
2026-09-10 23:29:28 +07:00

2.1 KiB
Raw Blame History

Архитектура

Krona Staff — deployable modular service с hexagonal boundaries. HTTP и workers вызывают application layer; domain contexts зависят только от ports; adapters обеспечивают standalone либо platform integration; PostgreSQL, Redis/BullMQ и object storage находятся на внешнем краю.

HTTP / worker -> application -> bounded-context contracts
                         |-> Identity / Authorization / Settings / Files / Notifications / EventBus ports
                         |-> tenant-scoped PostgreSQL repositories + transactional outbox
ports <- standalone adapters | platform-gateway adapters

Текущий код — foundation: health/version, конфигурация, ULID/event contracts, tenant transaction и инфраструктурная миграция. Доменный API отсутствует намеренно.

Контексты

Предусмотрены границы: Employee Directory, Employment, Organization Structure, Scheduling, Time & Attendance, Leave, Payroll, Documents, Audit/Reporting. Между ними допускаются команды/события и стабильные ID, но не общий «богатый» HR-aggregate. Пакеты будут созданы по мере утверждения требований, чтобы пустые интерфейсы не стали ложным контрактом.

Данные и надёжность

Shared database/shared schema, tenant_id в каждой tenant-таблице, application scope и forced RLS. Запись доменного состояния и outbox должна быть одной транзакцией. Inbox (tenant_id,event_id) подавляет повторную обработку; HTTP idempotency хранит request hash и результат. Сервис stateless, поэтому scale-out позже не требует переноса локальных файлов.

См. ADR-001.