Эпик 2 ревью: race-guard в геокодинге ПВЗ + фикс flaky теста #2

Merged
ant merged 1 commits from chore/review-E2-pvz-fixes into marketplace2 2026-05-20 11:59:55 +00:00
Owner

Ревью Эпика 2 «Сеть кооперативных участков (ПВЗ)».

HIGH: geocoder-factory.test.ts падал на toBeInstanceOf — из-за статического импорта класса до jest.resetModules конструкторы из старого и нового module instance не совпадали. Фикс: проверка через port.constructor.name.

HIGH: race в KuDetailsService.runGeocodeAndPersist — fire-and-forget без проверки актуальности адреса. Если админ обновит addressFull во время геокодинга, старый результат перезаписывал бы координаты нового адреса. Фикс: репозиторий updateGeocode принимает expectedAddressFull и атомарно проверяет совпадение перед записью.

Открытые фоллоуапы (не в этом PR — большие или требуют design-decision):

  1. CRITICAL: synchronize: true в marketplace-infrastructure.module.ts — все 24 таблицы создаются TypeORM auto-sync (нарушает CLAUDE.md). Требует bootstrap-v7 миграцию на все таблицы, не только ku_details.
  2. CRITICAL: marketplaceListKUDetails не делает LEFT JOIN с core coop_ku — admin не видит не детализированные КУ. Требует новый query CoopKuDTO + резолвер.
  3. CRITICAL: нет авто-INACTIVE при удалении core-КУ (нужен sync-listener на delta::cooperative::coop_ku).
  4. CRITICAL: реализован только admin-стол из трёх требуемых Story 2.3 (orderer + offerer столы — отдельные страницы с pin/list).
  5. HIGH: rate-limit Yandex Geocoder per-instance (не глобальный) — при горизонтальном масштабе можно превысить.
  6. MEDIUM: enum KuDetailsStatus/GeocodeStatus не зарегистрированы через registerEnumType (CLAUDE.md требует).
  7. MEDIUM: нет кеширования результатов геокодинга в Redis.

Тесты: 169/169 marketplace зелёные (раньше 167/169 — оба фейла теперь починены), tsc чист.

Ревью Эпика 2 «Сеть кооперативных участков (ПВЗ)». HIGH: geocoder-factory.test.ts падал на toBeInstanceOf — из-за статического импорта класса до jest.resetModules конструкторы из старого и нового module instance не совпадали. Фикс: проверка через port.constructor.name. HIGH: race в KuDetailsService.runGeocodeAndPersist — fire-and-forget без проверки актуальности адреса. Если админ обновит addressFull во время геокодинга, старый результат перезаписывал бы координаты нового адреса. Фикс: репозиторий updateGeocode принимает expectedAddressFull и атомарно проверяет совпадение перед записью. Открытые фоллоуапы (не в этом PR — большие или требуют design-decision): 1. CRITICAL: synchronize: true в marketplace-infrastructure.module.ts — все 24 таблицы создаются TypeORM auto-sync (нарушает CLAUDE.md). Требует bootstrap-v7 миграцию на все таблицы, не только ku_details. 2. CRITICAL: marketplaceListKUDetails не делает LEFT JOIN с core coop_ku — admin не видит не детализированные КУ. Требует новый query CoopKuDTO + резолвер. 3. CRITICAL: нет авто-INACTIVE при удалении core-КУ (нужен sync-listener на delta::cooperative::coop_ku). 4. CRITICAL: реализован только admin-стол из трёх требуемых Story 2.3 (orderer + offerer столы — отдельные страницы с pin/list). 5. HIGH: rate-limit Yandex Geocoder per-instance (не глобальный) — при горизонтальном масштабе можно превысить. 6. MEDIUM: enum KuDetailsStatus/GeocodeStatus не зарегистрированы через registerEnumType (CLAUDE.md требует). 7. MEDIUM: нет кеширования результатов геокодинга в Redis. Тесты: 169/169 marketplace зелёные (раньше 167/169 — оба фейла теперь починены), tsc чист.
ant added 1 commit 2026-05-20 11:34:03 +00:00
ant merged commit cdbce2b967 into marketplace2 2026-05-20 11:59:55 +00:00
ant deleted branch chore/review-E2-pvz-fixes 2026-05-20 11:59:55 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: C9S/mono#2