refactor: enforce repository boundary in application (WealthLedger/backend#171)
This commit is contained in:
+6
-6
@@ -29,9 +29,9 @@ market — котировками, income — выплатами/личными
|
||||
domain из-за extraction в функцию. Boundary mappers преобразуют внешние records;
|
||||
чистые расчёты portfolio/banking остаются у domain owner.
|
||||
|
||||
PrismaService владеет DB lifecycle. Самостоятельные use cases получают данные
|
||||
через concrete repositories; существующие связные CRUD/transaction services
|
||||
сохраняют прямые queries по [data convention](conventions/data.md).
|
||||
PrismaService владеет DB lifecycle. Application services/use cases получают
|
||||
данные через concrete repositories; запросы и CAS живут в infrastructure
|
||||
по [data convention](conventions/data.md).
|
||||
Money — currency + decimal string; расчёты используют точные общие helpers.
|
||||
|
||||
Auth управляет identity/session; TbankAccessService проверяет доступ к счёту и
|
||||
@@ -201,9 +201,9 @@ Circular dependencies устраняй изменением ownership/compositio
|
||||
конкретные infrastructure providers, зарегистрированные module. Infrastructure
|
||||
может использовать application types/input и domain rules; новые interfaces
|
||||
ради инверсии зависимостей не обязательны. Domain не импортирует presentation или
|
||||
infrastructure. Существующие связные CRUD/transaction services могут сохранять прямые queries
|
||||
по [Data](conventions/data.md); use case получает данные через repository и сам
|
||||
Prisma queries не выполняет. Entity/interface на каждую таблицу не требуется.
|
||||
infrastructure. Application не строит Prisma queries: use case и связный CRUD
|
||||
service обращаются к репозиторию по [Data](conventions/data.md). Entity/interface
|
||||
на каждую таблицу не требуется.
|
||||
DTO остаются транспортными runtime classes; существующее использование DTO
|
||||
на application boundary допустимо по [HTTP API](conventions/http-api.md).
|
||||
|
||||
|
||||
+10
-10
@@ -34,19 +34,19 @@ candidate, не повод дублировать их при новом use cas
|
||||
вызывает repository, затем чистый `bankSummary` и формирует ответ. Prisma records
|
||||
не становятся domain entities: расчёт получает только нужные ему значения.
|
||||
|
||||
Не создавай обёртку на каждый вызов Prisma. Существующие связные CRUD/transaction
|
||||
services (auth, lifecycle подключения, изменения карт/операций/категорий)
|
||||
сохраняют queries рядом с CAS и проверками инварианта, если их перенос требует
|
||||
лишь набора pass-through методов. Новая самостоятельная read/write capability
|
||||
получает repository method; самостоятельный use case не выполняет Prisma queries.
|
||||
`BankCardsRepository.write` сохраняет общую retry/transaction boundary для
|
||||
существующих banking services. Такой callback с Prisma transaction client —
|
||||
локальная техническая граница этих services, не API для domain или use cases.
|
||||
Application-код не импортирует PrismaService и не строит Prisma queries.
|
||||
Репозиторий владеет запросом и CAS-проверкой результата, а application —
|
||||
правилами и формированием ответа. Типы Prisma допустимы только в type-only
|
||||
импортах для существующей транзакционной границы. Не создавай обёртку
|
||||
на каждый вызов Prisma без текущего потребителя. `BankCardsRepository.write`
|
||||
сохраняет retry/transaction boundary для банковских записей; callback с
|
||||
transaction client — локальная техническая граница, не API для domain.
|
||||
|
||||
Выбирай только нужные данные, сохраняй user/account ownership в запросах и
|
||||
application checks. Предварительный lookup не заменяет unique constraint при race.
|
||||
Пример: AuthService обрабатывает P2002 и использует conditional `updateMany`
|
||||
для refresh rotation. Сначала пойми invariant; не копируй его flow в другой use case.
|
||||
Пример: AuthRepository преобразует P2002 в результат регистрации и выполняет
|
||||
conditional `updateMany` для refresh rotation; AuthService сохраняет HTTP
|
||||
error contract. Сначала пойми invariant; не копируй его flow в другой use case.
|
||||
|
||||
Transaction не охватывает сетевой T-Bank вызов как будто это одна atomic DB
|
||||
операция. Планируй порядок и compensation по текущей задаче; не удерживай DB
|
||||
|
||||
Reference in New Issue
Block a user