Skip to content

LED 132 add user owned composite foreign keys - #265

Merged
gorushkin merged 4 commits into
mainfrom
LED-132-add-user-owned-composite-foreign-keys
Aug 7, 2026
Merged

gorushkin merged 4 commits into
mainfrom
LED-132-add-user-owned-composite-foreign-keys

Conversation

@gorushkin

Copy link
Copy Markdown
Owner

No description provided.

…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
@gorushkin
gorushkin changed the base branch from LED-64-currency-and-asset-registry to main August 6, 2026 12:29
@gorushkin
gorushkin requested a lite review from Copilot August 6, 2026 12:29

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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.

Comment thread apps/backend/src/presentation/http/error-handler.ts Outdated
Comment thread apps/backend/drizzle/meta/_journal.json
@gorushkin
gorushkin merged commit 57101ce into main Aug 7, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants