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— passserver npm run lint— pass, warnings onlyserver npm run format:check— passclient npm run lint— pass, warnings onlyclient npm run format:check— passclient focused vitest— passclient npm run build— pass, Vite chunk-size warning only