[Refactor] Prisma только в репозиториях: auth и bank-cards #171

Closed
opened 2026-11-04 01:03:05 +03:00 by codex-bot · 2 comments
Owner

Аудит 2026-10-19, CQ-007/OE-07, план п.22. По решению владельца меняется конвенция: прежнее исключение для связных CRUD-сервисов (.ai/conventions/data.md:37-44, .ai/architecture.md) отменяется.

Результат

  • Обновлены data.md и architecture.md: application-слой не обращается к Prisma, транзакция и CAS живут в репозитории, а проверка инварианта находится рядом с CAS внутри репозиторного метода.
  • Запросы из auth.service, bank-cards.service, bank-operations.service и expense-categories.service перенесены в репозитории (BankCardsRepository, новый AuthRepository), граница write(tx) сохранена.
  • Lint-запрет prismaImports распространён на src/**/application/**; type-only импорты допустимы, только если без них не обойтись. Тест в test/eslint-config.cjs обновлён.

AC

  • В application/ нет runtime-импортов Prisma и PrismaService; lint это обеспечивает.
  • Семантика транзакций, CAS, ротации refresh-токена и P2002 не меняется.
  • npm run verify, e2e app/bank-cards и test:durability проходят.
Аудит 2026-10-19, CQ-007/OE-07, план п.22. По решению владельца меняется конвенция: прежнее исключение для связных CRUD-сервисов (`.ai/conventions/data.md:37-44`, `.ai/architecture.md`) отменяется. ## Результат - Обновлены `data.md` и `architecture.md`: application-слой не обращается к Prisma, транзакция и CAS живут в репозитории, а проверка инварианта находится рядом с CAS внутри репозиторного метода. - Запросы из `auth.service`, `bank-cards.service`, `bank-operations.service` и `expense-categories.service` перенесены в репозитории (`BankCardsRepository`, новый `AuthRepository`), граница `write(tx)` сохранена. - Lint-запрет `prismaImports` распространён на `src/**/application/**`; type-only импорты допустимы, только если без них не обойтись. Тест в `test/eslint-config.cjs` обновлён. ## AC - [ ] В `application/` нет runtime-импортов Prisma и PrismaService; lint это обеспечивает. - [ ] Семантика транзакций, CAS, ротации refresh-токена и P2002 не меняется. - [ ] `npm run verify`, e2e app/bank-cards и `test:durability` проходят.
codex-bot added the Kind/Refactor label 2026-11-04 01:03:05 +03:00
Author
Owner

После перепроверки scope: auth.service.ts 216 строк и три банковских service (~700 строк) содержат 48 прямых Prisma/tx операций. Попытка перенести их все одновременно затрагивает refresh-token CAS, idempotent operation replay и конкурентные банковские записи. Начну с auth как самостоятельной поставки; полную смену конвенции и запрет lint введём только после успешного переноса всех владельцев. Не буду заявлять AC выполненными до проверки durability с отдельным baseline.

После перепроверки scope: `auth.service.ts` 216 строк и три банковских service (~700 строк) содержат 48 прямых Prisma/tx операций. Попытка перенести их все одновременно затрагивает refresh-token CAS, idempotent operation replay и конкурентные банковские записи. Начну с auth как самостоятельной поставки; полную смену конвенции и запрет lint введём только после успешного переноса всех владельцев. Не буду заявлять AC выполненными до проверки durability с отдельным baseline.
Author
Owner

Подзадачи готовы: PR #180 выносит auth DB/CAS в AuthRepository; PR #181 выносит expense-categories в BankCardsRepository. Оба прошли npm run verify и test:e2e. Остались bank-cards.service.ts и bank-operations.service.ts, затем изменение .ai/conventions/data.md, .ai/architecture.md и lint-правила. Сервис карт (~150 строк) при наивном переносе целиком в репозиторий стал pass-through оболочкой — отменил этот вариант; следующий шаг — спроектировать шов, который сохраняет бизнес-правила в application. Issue оставляю открытой.

Подзадачи готовы: PR #180 выносит auth DB/CAS в AuthRepository; PR #181 выносит expense-categories в BankCardsRepository. Оба прошли `npm run verify` и `test:e2e`. Остались bank-cards.service.ts и bank-operations.service.ts, затем изменение `.ai/conventions/data.md`, `.ai/architecture.md` и lint-правила. Сервис карт (~150 строк) при наивном переносе целиком в репозиторий стал pass-through оболочкой — отменил этот вариант; следующий шаг — спроектировать шов, который сохраняет бизнес-правила в application. Issue оставляю открытой.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WealthLedger/backend#171