Order Service — Phase 3

Что сделано

DTO

  • CheckoutRequest.java — добавлено поле @JsonProperty("customer_id") UUID customerId
  • OpenDineInRequest.java — то же

Service

  • OrderService.checkoutOrder.builder().customerId(req.getCustomerId())
  • OrderService.openDineIn — то же
  • NEW attachCustomerInternal(orderId, customerId) — без JwtUser, для X-Service-Token из POS BFF
  • NEW detachCustomerInternal(orderId) — то же

Controller

  • InternalOrderController — добавлены 2 endpoint’а:
    • PATCH /internal/orders/{id}/customer — body { customer_id: UUID }
    • DELETE /internal/orders/{id}/customer — 204

Не трогали

  • Order entity — customer_id колонка уже была (миграция 006-br-3-1)
  • Public OrderController.attachCustomer / detachCustomer — оставлены для админ-flow
  • Customer Service — не трогали, всё уже было готово
  • Bridge events (order.customer.attached) — пока не публикуются, аналитика идёт через customer-summary endpoint который уже работает

Файлы

  • src/main/java/com/erp/order/dto/request/CheckoutRequest.java
  • src/main/java/com/erp/order/dto/request/OpenDineInRequest.java
  • src/main/java/com/erp/order/service/OrderService.java
  • src/main/java/com/erp/order/controller/InternalOrderController.java

Smoke

SVC=erp-internal-service-token-2026
ORDER_ID=$(...создать заказ через /checkout с customer_id...)
CUSTOMER_ID=$(curl /internal/customers/search-by-phone?franchise_id=...&phone=+79161234567 | jq -r .data.id)
 
# Attach
curl -X PATCH http://localhost:3005/internal/orders/$ORDER_ID/customer \
  -H "X-Service-Token: $SVC" -H 'Content-Type: application/json' \
  -d "{\"customer_id\":\"$CUSTOMER_ID\"}"
# → { "data": { ..., "customer_id": "..." } }
 
# Detach
curl -X DELETE http://localhost:3005/internal/orders/$ORDER_ID/customer \
  -H "X-Service-Token: $SVC"
# → 204