User Service — X/Z отчёты смены
Контракт
Задачи
OrderServiceClient
- Новый метод
getShiftReport(storeId, employeeId, from, to)в OrderServiceClient - Конфигурация:
ORDER_SERVICE_URLв application.yml (если ещё нет) - DTO:
ShiftReportResponse(total_revenue, cash/card/qr_amount, orders count, top_items)
Endpoint
-
GET /api/v1/shift-records/{id}/report— новый public endpoint- Получить shift_record по id
- Проверить ролевой доступ (franchise — все, franchisee — свои ТТ, manager — своя ТТ, cashier — 403)
- Определить
report_type: clock_out IS NULL →x_report, иначе →z_report - Определить период:
from = clock_in,to = clock_out ?? now() - Вызвать OrderServiceClient.getShiftReport(store_id, employee_id, from, to)
- Собрать ответ: shift data + financials + top_items
Ролевой доступ
- Franchise — все смены
- Franchisee — только смены сотрудников своих ТТ
- Manager — только смены своей ТТ
- Cashier — 403
Тесты
- Unit-тест: X-отчёт (clock_out = null, period = clock_in..now)
- Unit-тест: Z-отчёт (clock_out set, period = clock_in..clock_out)
- Unit-тест: ролевой доступ (403 для чужой ТТ)
- Integration-тест: endpoint + mock OrderServiceClient