22 lines
2.2 KiB
Markdown
22 lines
2.2 KiB
Markdown
# Архитектура
|
||
|
||
Krona Staff — deployable modular service с hexagonal boundaries. HTTP и будущие workers вызывают application layer; domain contexts зависят только от ports; adapters обеспечивают standalone либо platform integration; PostgreSQL находится на внешнем краю. Redis/BullMQ и object storage подключаются только после появления подтверждённых сценариев.
|
||
|
||
```text
|
||
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](adr/ADR-001-technology-and-runtime-modes.md).
|