Доменное ядро (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-имя | Алиас | Что внутри |
|---|---|---|---|
money | api-core-money | @crewsforge-back/apis/core/money | Комиссия и разбиение холда: calculateCommissionFee, splitSettlement; представление денег в JSON: enableBigIntJsonSerialization, bigIntJsonReplacer |
domain-events | api-core-domain-events | @crewsforge-back/apis/core/domain-events | Каталог routing keys шины и типы payload’ов: DOMAIN_EVENT_ROUTING_KEY, DomainEvent<K> |
platform-calendar | api-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- отличает общие библиотеки от фич сервисов.
Кто уже использует
Заголовок раздела «Кто уже использует»| Либа | Кто импортирует |
|---|---|
money | api-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.