refactor: simplify order status model — remove DELIVERY_FEE_ADJUSTMENT and PAYMENT_VERIFICATION
- 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
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
# Дизайн: Упрощение статусной модели заказов (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`.
|
||||
|
||||
### Изменяемые файлы
|
||||
|
||||
1. `server/prisma/schema.prisma` — добавить `deliveryFeeLocked Boolean @default(false)`
|
||||
2. `shared/constants/order-status.js` — убрать 2 статуса
|
||||
3. `shared/constants/order-status.d.ts` — убрать 2 статуса
|
||||
4. `server/src/lib/order-status.js` — обновить `canTransitionAdminOrderStatus`
|
||||
5. `client/src/shared/constants/order.ts` — обновить `getAdminNextOrderStatuses`
|
||||
6. `client/src/shared/lib/order-status-labels.ts` — убрать подписи
|
||||
7. `server/src/routes/user-orders.js` — убрать `DELIVERY_FEE_ADJUSTMENT`
|
||||
8. `server/src/routes/user-payments.js` — убрать `PAYMENT_VERIFICATION`
|
||||
9. `server/src/routes/api/admin-orders.js` — добавить эндпоинт `deliveryFeeLocked`, убрать проверки
|
||||
10. `client/src/pages/admin-orders/ui/AdminOrdersPage.tsx` — обновить UI
|
||||
11. `client/src/features/order-payment/ui/OrderPaymentSection.tsx` — обновить UI
|
||||
12. `server/src/lib/__tests__/order-status.test.js` — обновить тесты
|
||||
Reference in New Issue
Block a user