BR 2.1 — Order Service
Репозиторий
Миграция
- Создать таблицу
orders (id, franchise_id, store_id, order_number, order_type, status, total, payment_method, paid_amount, rrn, card_last4, comment, cancel_reason, created_by, paid_at, completed_at, cancelled_at, timestamps)
- CHECK constraint на order_type IN (‘takeaway’, ‘dine_in’, ‘delivery’)
- CHECK constraint на status IN (‘new’, ‘in_progress’, ‘ready’, ‘closed’, ‘cancelled’)
- Индекс
idx_orders_franchise_store_status на (franchise_id, store_id, status)
- Индекс
idx_orders_store_created_at на (store_id, created_at)
- Создать таблицу
order_items (id, order_id FK CASCADE, product_id, product_name, quantity, unit_price, total_price, modifiers jsonb, notes, created_at)
- Индекс
idx_order_items_order_id на (order_id)
Entity / DTO
- Создать
Order entity
- Создать
OrderItem entity
- Создать
OrderResponse DTO (с items)
- Создать
OrderListItemResponse DTO (без items, для списка)
- Создать
OrderItemResponse DTO
- Создать
CreateOrderRequest DTO (store_id, order_type, comment?)
- Создать
UpdateOrderRequest DTO (comment?)
- Создать
CreateOrderItemRequest DTO (product_id, product_name, quantity, unit_price, modifiers?, notes?)
- Создать
PayOrderRequest DTO (method, amount, rrn?, card_last4?)
- Создать
CancelOrderRequest DTO (reason)
Repository
Service
- Создать
OrderService:
-
createOrder — создать заказ в статусе new, сгенерировать order_number
-
getOrder — получить заказ с items, ролевая проверка store_id
-
listOrders — список с фильтрами, ролевая фильтрация по store_ids
-
updateOrder — обновить comment (только в new)
-
addItem — добавить позицию (только в new), пересчитать total
-
removeItem — удалить позицию (только в new), пересчитать total
-
payOrder — записать payment_method, paid_amount, rrn, card_last4, paid_at; статус → ready
-
completeOrder — статус ready → closed, записать completed_at
-
cancelOrder — статус → cancelled (из new/in_progress/ready), записать cancel_reason, cancelled_at
- Валидация статусных переходов (status machine)
- Пересчёт total при добавлении/удалении позиций
Controller
Security
Конфигурация
Kafka Events
Ссылки