Repository navigation
LED 132 add user owned composite foreign keys - #265
Conversation
…tries test: add referential integrity tests for transactions and operations feat: enforce unique constraints on accounts and transactions schemas fix: update foreign key references in operations and transactions schemas chore: improve error handling in BaseRepository for database operations test: enhance operation and transaction repository tests for foreign key constraints
…for querying closed accounts
There was a problem hiding this comment.
🟡 Changes recommended
Есть как минимум один несогласованный с API-контрактом момент в маппинге Fastify ошибок (status vs payload.code) и существенный риск от “сквоша”/сброса истории миграций Drizzle для существующих окружений.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
This review doesn't count toward merge requirements. Sign up for the private preview to control whether Copilot approvals count.
Pull request overview
PR усиливает referential integrity для multi-tenant данных: вводит same-user composite foreign keys (через (user_id, id) уникальные индексы) для предотвращения ссылок на сущности другого пользователя на уровне БД, а также подстраивает тесты/документацию под новое поведение.
Changes:
- Добавлены композитные FK/уникальные индексы в Drizzle-схемах для
accounts,transactions,operations. - Обновлены backend-тесты (HTTP/integration + repo/db) под новые ограничения владения (включая новые проверки FK на уровне БД).
- Улучшен
errorHandlerдля Fastify-ошибок: сохранение статуса + новые unit-тесты; обновлены docs/ADR.
File summaries
| File | Description |
|---|---|
| packages/shared/src/validation/accounts.test.ts | Добавлен тест на status: "closed" для accountQuerySchema. |
| docs/DATABASE_SCHEMA.md | Документация: перечислены same-user composite FK для ключевых связей. |
| docs/architecture/adr/0021-split-commodity-reference-business-policy-from-persistence-integrity.md | ADR обновлён: фиксирует реализацию same-user composite FK через LED-132. |
| apps/backend/src/presentation/http/transactions/transaction.integration.test.ts | Тесты обновлены, чтобы создавать транзакции с commodity того же пользователя (иначе БД-ограничения ломают сценарий). |
| apps/backend/src/presentation/http/error-handler.ts | Изменена обработка Fastify ошибок: сохранение statusCode/status и выбор API code. |
| apps/backend/src/presentation/http/error-handler.test.ts | Добавлены тесты на сохранение 4xx статуса и корректную классификацию 5xx. |
| apps/backend/src/infrastructure/db/transaction/transaction.repository.test.ts | Добавлен тест на отказ создания транзакции при commodity другого пользователя. |
| apps/backend/src/infrastructure/db/operations/operation.repository.test.ts | Добавлены тесты на FK-ошибки при вставке operation с account/transaction другого пользователя. |
| apps/backend/src/infrastructure/db/BaseRepository.ts | Вместо InvalidDataError теперь пробрасываются любые DatabaseError (включая FK/unique и т.п.). |
| apps/backend/src/db/test-db.ts | Уточнены where-условия через eq/and вместо сырого sql (и мелкие правки). |
| apps/backend/src/db/schemas/transactions.ts | Композитный FK (userId, commodityId) и unique index (userId, id) для транзакций. |
| apps/backend/src/db/schemas/operations.ts | Композитные FK для операций к accounts/transactions по (userId, …Id) + обновление relations. |
| apps/backend/src/db/schemas/accounts.ts | Добавлен unique index (userId, id) для поддержки composite FK. |
| apps/backend/src/db/referential-integrity.test.ts | Новый тест на отказ insert транзакции при commodity другого пользователя на уровне БД. |
| apps/backend/src/application/services/CommodityReferencePolicy/commodity-reference.policy.ts | Удалена проверка isDeleted() для commodity при создании аккаунта. |
| apps/backend/src/application/services/CommodityReferencePolicy/tests/commodity-reference.policy.test.ts | Удалён тест про “deleted commodity” (соответствует изменённой политике). |
| apps/backend/drizzle/meta/0003_snapshot.json | Удалён старый snapshot Drizzle. |
| apps/backend/drizzle/meta/0002_snapshot.json | Удалён старый snapshot Drizzle. |
| apps/backend/drizzle/meta/0001_snapshot.json | Удалён старый snapshot Drizzle. |
| apps/backend/drizzle/meta/0000_snapshot.json | Обновлён snapshot: новые FK/unique индексы и поле is_closed у commodities. |
| apps/backend/drizzle/meta/_journal.json | Журнал миграций сброшен до единственной записи 0000_*. |
| apps/backend/drizzle/0003_bored_daredevil.sql | Удалена старая миграция. |
| apps/backend/drizzle/0002_numerous_alice.sql | Удалена старая миграция. |
| apps/backend/drizzle/0001_adorable_star_brand.sql | Удалена старая миграция. |
| apps/backend/drizzle/0000_nostalgic_ben_parker.sql | Обновлена базовая миграция: композитные FK/unique индексы + commodities.is_closed. |
Review details
- Files reviewed: 25/25 changed files
- Comments generated: 2
- Review effort level: Lite
We're testing this review assessment. Please use 👍 or 👎 to tell us if it's correct.
No description provided.