Перейти к содержимому

Доменное ядро (libs/apis/core)

libs/apis/core/ — группа независимых Nx-библиотек с доменной логикой, у которой нет ни одной зависимости: ни от NestJS, ни от инфраструктуры (Prisma, Redis, RabbitMQ, S3), ни друг от друга. Только чистые функции, константы и типы. Правило отбора: сюда попадает то, что не зависит ни от NestJS, ни от инфраструктуры — если библиотеке нужен модуль, провайдер или DI, ей место в libs/apis/shared/ или libs/apis/utils/, а не здесь.

Группа появилась отдельно от libs/apis/shared/, потому что shared — это сам проект api-shared (его src/ лежит прямо в libs/apis/shared/), и вложить туда независимые Nx-проекты с собственными границами некуда.

Отдельный Nx-проект нужен ради границы. Импортировать ядро можно откуда угодно — в этом и смысл фундамента. Запрет работает в обратную сторону: ядро не тянет ни NestJS, ни инфраструктуру, а api-core-money вдобавок станет тем проектом, зависимость от которого C4.1 запретит операторским поверхностям (решение №21, слой границ Nx в O-1). Сегодня depConstraints в eslint.config.mjs не ограничивают ничего: правило sourceTag: '*' разрешает все связи.

Публикатора событий, конфиг-модулей и клиентов здесь нет и не будет — это ответственность других слоёв (F2/C1 для outbox-релея, libs/apis/configs и libs/apis/utils для инфраструктуры).

БиблиотекаNx-имяАлиасЧто внутри
moneyapi-core-money@crewsforge-back/apis/core/moneyКомиссия и разбиение холда: calculateCommissionFee, splitSettlement; представление денег в JSON: enableBigIntJsonSerialization, bigIntJsonReplacer
domain-eventsapi-core-domain-events@crewsforge-back/apis/core/domain-eventsКаталог routing keys шины и типы payload’ов: DOMAIN_EVENT_ROUTING_KEY, DomainEvent<K>
platform-calendarapi-core-platform-calendar@crewsforge-back/apis/core/platform-calendarРабочий календарь и арифметика над Date: PLATFORM_CALENDAR, addWorkingHours, addWorkingDays

Все три помечены тегами scope:shared, type:util. Схема имён — api-core-<name> (не <name>-core, не core-<name>): расширение схемы coding-rules.md §1.2 намеренное — core-money спутывалось бы с приложением core-api, а префикс api- отличает общие библиотеки от фич сервисов.

ЛибаКто импортирует
moneyapi-util-prisma-client (prisma-client.service.ts — включает сериализацию денег в JSON) и api-shared (mapper.service.ts — тот же replacer при сборке DTO)
domain-eventsпотребителей в приложениях пока нет; значения enum’ов схемы сверяются с её union’ами тестом apps/core-api/prisma/schema-enums.spec.ts
platform-calendarпотребителей в приложениях пока нет — появятся вместе с таймерами в O1

Расчётные функции money (calculateCommissionFee, splitSettlement) в приложениях ещё не вызываются: их первые потребители — M2 и M4.

Подробности реализации и обоснования: design-документ F1.