f855568687
- Add deliveryFeeLocked field to Order model - Remove DELIVERY_FEE_ADJUSTMENT and PAYMENT_VERIFICATION statuses (11→8) - 3 order paths: delivery+online (locked→unlocked→paid), pickup+online (unlocked→paid), pickup+on_pickup (direct to in_progress) - Update checkout to use PENDING_PAYMENT + deliveryFeeLocked - Update payment flow to stay in PENDING_PAYMENT until admin confirms - Update admin UI to use deliveryFeeLocked instead of status check - Update client payment UI with new deliveryFeeLocked logic
3.5 KiB
3.5 KiB
Дизайн: Упрощение статусной модели заказов (A+B)
Дата: 2026-05-15 Статус: Утверждено
Проблема
Текущая модель заказов содержит 11 статусов, из которых два (DELIVERY_FEE_ADJUSTMENT, PAYMENT_VERIFICATION) являются промежуточными и могут быть заменены флагами/логикой.
Решение
Убрать 2 статуса, добавить флаг deliveryFeeLocked. Итого: 9 → 8 статусов (было 11).
Удалённые статусы
| Было | Чем заменяется |
|---|---|
DELIVERY_FEE_ADJUSTMENT |
Флаг deliveryFeeLocked: Boolean на заказе |
PAYMENT_VERIFICATION |
Заказ остаётся в PENDING_PAYMENT до ручного подтверждения |
Новая статусная модель
DRAFT ──→ PENDING_PAYMENT ──→ PAID ──→ IN_PROGRESS ──┬─→ SHIPPED ──────────┐
│ │
└─→ READY_FOR_PICKUP ──┤
▼
DONE
CANCELLED ←── (из любого статуса, кроме DONE и CANCELLED)
Логика deliveryFeeLocked
| Значение | Админ | Клиент |
|---|---|---|
false |
Может менять deliveryFeeCents |
Видит "ожидает утверждения доставки", оплата недоступна |
true |
Не может менять доставку | Видит кнопку оплаты |
Переходы (admin)
| Из | В |
|---|---|
DRAFT |
PENDING_PAYMENT, CANCELLED |
PENDING_PAYMENT |
PAID, CANCELLED |
PAID |
IN_PROGRESS, CANCELLED |
IN_PROGRESS (delivery) |
SHIPPED, CANCELLED |
IN_PROGRESS (pickup) |
READY_FOR_PICKUP, CANCELLED |
SHIPPED |
(нет) |
READY_FOR_PICKUP |
(нет) |
DONE |
(нет) |
CANCELLED |
(нет) |
Миграция данных
Все заказы в статусе DELIVERY_FEE_ADJUSTMENT → PENDING_PAYMENT + deliveryFeeLocked: false.
Все заказы в статусе PAYMENT_VERIFICATION → PENDING_PAYMENT.
Изменяемые файлы
server/prisma/schema.prisma— добавитьdeliveryFeeLocked Boolean @default(false)shared/constants/order-status.js— убрать 2 статусаshared/constants/order-status.d.ts— убрать 2 статусаserver/src/lib/order-status.js— обновитьcanTransitionAdminOrderStatusclient/src/shared/constants/order.ts— обновитьgetAdminNextOrderStatusesclient/src/shared/lib/order-status-labels.ts— убрать подписиserver/src/routes/user-orders.js— убратьDELIVERY_FEE_ADJUSTMENTserver/src/routes/user-payments.js— убратьPAYMENT_VERIFICATIONserver/src/routes/api/admin-orders.js— добавить эндпоинтdeliveryFeeLocked, убрать проверкиclient/src/pages/admin-orders/ui/AdminOrdersPage.tsx— обновить UIclient/src/features/order-payment/ui/OrderPaymentSection.tsx— обновить UIserver/src/lib/__tests__/order-status.test.js— обновить тесты