Order Service
Ответственность
Управление заказами, статусная машина и фиксация факта оплаты:
- Заказы (BR 2.1) — CRUD заказов, автоматическая нумерация per-store per-day
- Позиции заказа (BR 2.1) — добавление/удаление позиций (только в статусе
new)
- Статусная машина (BR 2.1) —
new → in_progress → ready → closed | cancelled
- Фиксация оплаты (BR 2.1) — запись факта оплаты (способ, сумма, RRN), переход в
ready
Phase 2+ (не реализовано): кухонный дисплей (in_progress), возвраты, скидки/промокоды, лояльность, авто-списание со склада, привязка клиента.
Отчёт по смене (BR 2.2)
- Internal endpoint
GET /internal/orders/shift-report — агрегация заказов за период для X/Z отчёта
- Фильтрация по
paid_at (дата оплаты), store_id, employee_id (optional)
- Возвращает: выручку, разбивку по способам оплаты, количество заказов, топ товаров
- Вызывается из User Service при формировании отчёта по смене
Функции
| Функция | Описание |
|---|
| Создание заказа | Создаёт заказ в статусе new с автогенерацией номера per-store per-day |
| Добавление позиции | Добавляет товар в заказ (только new). Денормализует product_name, unit_price, модификаторы |
| Удаление позиции | Удаляет товар из заказа (только new). Пересчитывает total |
| Фиксация оплаты | Записывает payment_method, paid_amount, rrn, card_last4. Переводит в ready |
| Завершение заказа | Переводит из ready в closed (выдан клиенту) |
| Отмена заказа | Переводит в cancelled из new/in_progress/ready. Требует причину |
| Список заказов | Фильтрация по store_id, status, date_from, date_to. Ролевая фильтрация |
| Детали заказа | Заказ с позициями, данными оплаты |
| Агрегация для отчёта смены | Финансовая сводка за период (internal, BR 2.2) |
Бизнес-правила
- Номер per-store per-day — формат “001”, “002”…, сбрасывается ежедневно для каждой ТТ
- Позиции только в
new — добавлять/удалять можно пока статус new
- Отмена не из
closed — после закрытия отмена невозможна (возврат — Phase 2)
- Оплата — фиксация факта — Order Service не проводит платёж, только записывает результат от POS
- Денормализация — product_name, unit_price, модификаторы копируются при создании позиции
- Пересчёт total — сумма заказа пересчитывается при добавлении/удалении позиций
Ролевой доступ
| Действие | Франшиза | Франчайзи | Менеджер | Кассир |
|---|
| GET /orders (список) | Все ТТ | Свои ТТ | Своя ТТ | Своя ТТ |
| GET /orders/{id} | Все ТТ | Свои ТТ | Своя ТТ | Своя ТТ |
| POST /orders | — | — | — | Да |
| POST /orders/{id}/items | — | — | — | Да |
| DELETE /orders/{id}/items/{itemId} | — | — | — | Да |
| POST /orders/{id}/pay | — | — | — | Да |
| POST /orders/{id}/complete | — | — | Да | Да |
| POST /orders/{id}/cancel | Да | Свои ТТ | Своя ТТ | Свой заказ |
| PATCH /orders/{id} | — | — | Да | Да |
Зависимости
- PostgreSQL (
order_db) — основное хранилище
- Auth Service — JWT-валидация (franchise_id, store_ids, role)
- Catalog Service — товары и цены для денормализации в позиции (lookup при создании позиции не требуется — POS передаёт все данные)
- Store Service — валидация store_id при создании заказа
- User Service — вызывает internal endpoint shift-report (BR 2.2)
Конфигурация
| Переменная | Описание | Default |
|---|
DB_HOST | PostgreSQL host | localhost |
DB_PORT | PostgreSQL port | 5432 |
DB_NAME | Database name | order_db |
DB_USER | Database user | order_service |
DB_PASSWORD | Database password | — |
SERVER_PORT | HTTP port | 3005 |
JWT_SECRET | JWT signing key | — |
Ссылки