Files
shop-server/docs/superpowers/audits/2026-05-28-orders-payments-audit.md
T
2026-05-28 21:46:17 +05:00

3.4 KiB

Аудит заказов, оплаты и админки заказов

Дата: 2026-05-28 Scope: orders/payments/admin-orders

Summary

  • P0: не найдено в первой итерации.
  • P1: исправлены SSE/queryKey для админской деталки, authorType админского чата, summary внимания и guard оплаты до подтверждения доставки.
  • P2: добавлены focused tests для найденных дефектов.
  • P3: рефакторинги оставлены в backlog.

Findings

P1-001: SSE инвалидирует несуществующий queryKey админской деталки

Статус: fixed Код: client/src/app/providers/SseProvider.tsx Тест: client/src/app/providers/__tests__/SseProvider.test.tsx Симптом: события message:new, order:statusChanged, order:updated инвалидируют ['admin', 'orders', orderId], но деталка использует ['admin', 'orders', 'detail', selectedId]. Решение: добавить инвалидацию ['admin', 'orders', 'detail', orderId], списка и summary для order events.

P1-002: Админский чат передает инвертированный authorType в ChatMessageBubble

Статус: fixed Код: client/src/features/order-detail/ui/OrderDetailContent.tsx Тест: client/src/features/order-detail/ui/__tests__/OrderDetailContent.test.tsx Симптом: для m.authorType === 'admin' компонент получает authorType="user". Решение: передавать фактический authorType: admin-message как admin, user-message как user.

P1-003: Admin summary считает все PENDING_PAYMENT как attention

Статус: fixed Код: server/src/routes/api/admin-orders.js Тест: server/src/routes/api/__tests__/admin-orders.test.js Симптом: attentionCount считает все PENDING_PAYMENT, включая заказы, где цена уже подтверждена. Решение: считать только PENDING_PAYMENT + delivery + deliveryFeeLocked=false.

P1-004: Admin может перевести delivery-заказ в PAID до подтверждения цены

Статус: fixed Код: server/src/routes/api/admin-orders.js Тест: server/src/routes/api/__tests__/admin-orders.test.js Симптом: статусный guard разрешает PENDING_PAYMENT -> PAID без проверки deliveryFeeLocked. Решение: для next === 'PAID' отклонять delivery-заказы с deliveryFeeLocked === false кодом 409.

Refactor Backlog

  • Проверить, нужен ли client/src/shared/constants/order.ts::canTransitionOrderStatus; если нужен, сделать deliveryType обязательным аргументом.
  • После стабилизации route-тестов рассмотреть вынос части логики admin-orders.js в маленькие pure helpers.

Verification

  • server npm test — pass
  • server npm run lint — pass, warnings only
  • server npm run format:check — pass
  • client npm run lint — pass, warnings only
  • client npm run format:check — pass
  • client focused vitest — pass
  • client npm run build — pass, Vite chunk-size warning only