As we bring multiple fulfillment centers online, we need a central inventory service that keeps counts accurate across warehouses and prevents overselling. Order taking must stay fast: after a customer’s payment, the order system emits an `order.paid` event; the inventory service consumes it, picks the most suitable warehouse based on the shipping address and stock, and reduces the product quantities in a single transaction.

We’ll implement this as an internal Express.js service backed by MySQL and RabbitMQ.

Requirements:
- Warehouses can submit stock adjustments (arrivals, damage) via an internal endpoint; include productId, warehouseId, change (+/-), and a reason. The call returns 202 and is processed asynchronously.
- Every inventory change is captured for audit (who/when/what, before/after).
- If a product’s stock drops below a configured threshold, publish a `stock.low` event.

Core endpoints:
- POST /v1/internal/inventory/adjustments
  Auth: internal API key or mTLS
  Body: { "adjustments": [{ "productId": "string", "warehouseId": "string", "change": "integer" }], "reason": "string" }
  Response: 202 Accepted
- GET /v1/products/{productId}/stock
  Auth: session-based (internal dashboards)
  Response: { "productId": "string", "totalStock": "integer", "stockByWarehouse": [{ "warehouseId": "string", "quantity": "integer" }] }