Store Service — POS Phase 1

Что сделано

Расширен InternalZalTableController для покрытия manager-операций со столами с POS BFF (через X-Service-Token, без отдельного JWT-flow):

EndpointЧто делает
POST /internal/tables/by-store/{storeId}Create стол. 409 при дубликате number. Default capacity=4, position=(0,0), status=free.
PATCH /internal/tables/{id}Update любого подмножества: number/label/capacity/position_x/y. 409 при коллизии number.
DELETE /internal/tables/{id}Soft delete (deleted_at). 409 если стол current_order_id != null (нельзя удалить занятый).
PATCH /internal/tables/{id}/waiterBR 3.2 — assign/unassign current_waiter_id (null = снять).

Бизнес-правила (TABLE_NUMBER_DUPLICATE, TABLE_OCCUPIED) уже в ZalTableService — internal controller только проксирует.

Не трогали

  • ZalTable entity / migration — без изменений
  • ZalTableService — без изменений (все методы уже были)
  • ZalTableController (public) — без изменений
  • OrderStatusConsumer (auto-release при закрытии заказа) — без изменений

Файлы

  • src/main/java/com/erp/store/controller/InternalZalTableController.java — extended

Тесты

  • Smoke на VPS: curl -H "X-Service-Token: $SVC" -X POST $STORE/internal/tables/by-store/$STORE_ID -d '{"number":99,"capacity":2}'
  • Полная цепочка проверена через UI desktop-pos (ниже в Desktop POS)

Ссылки