krona-staff/docs/ARCHITECTURE.md

2.2 KiB
Raw Permalink 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.