POS BFF — Phase 2

Что сделано

NEW routes/staff.ts

GET /api/v1/pos/staff   → user-service /internal/users/by-store/{activeStoreId}/pos-employees

Возвращает [{ id, first_name, last_name, role_names[] }] — все активные сотрудники ТТ с pin_hash и pos.access. Используется WaiterPickerModal на desktop-pos.

Auth: requireCashier (видеть список нужно всем, кто работает за кассой).

server.ts — registered prefix /api/v1/pos/staff

Reused (без изменений из Phase 1)

  • POST /api/v1/pos/orders/:id/add-items — proxy /internal/orders/:id/add-items
  • POST /api/v1/pos/orders/:id/close-with-payment — proxy /internal/orders/:id/close-with-payment
  • GET /api/v1/pos/orders/by-table/:tableId — proxy /internal/orders/by-table/:tableId
  • PATCH /api/v1/pos/tables/:id/waiter — proxy /internal/tables/:id/waiter (BR 3.2)

Файлы

  • NEW bff/src/routes/staff.ts
  • bff/src/server.ts — добавлены import + register

Smoke

# на VPS
docker exec erp-nginx wget -qO- --header='Authorization: Bearer dev-cashier-1' \
  http://erp-pos-bff:3022/api/v1/pos/staff
# → 401 (AUTH_STUB=false в prod, нужен реальный JWT)
 
# user-service напрямую
curl http://localhost:3002/internal/users/by-store/$STORE_ID/pos-employees \
  -H "X-Service-Token: $SVC"
# → {"data":[{Мария Петрова, Кассир}, {Дмитрий Сидоров, Менеджер ТТ+Кассир}]}