Замовлення, товари та склад
Канонічний стан замовлення, транзакційний облік залишків і керовані резерви.
1. Замовлення має власний server-side lifecycle
Канал продажу подає команду, але backend перевіряє магазин, покупця, позиції, ціну, доставку та право на зміну.
Доступні переходи залежать від типу замовлення і поточного стану. Публічний UI не може довільно позначити оплату, відвантаження або видачу.
POST /api/v1/external/stores/{store_id}/checkout/submissions
Authorization: Api-Key <store-api-key>
Idempotency-Key: <stable-operation-key>2. Залишки змінюються транзакційно
Товар, склад, локація, фізичний баланс і резерв — окремі сутності. PostgreSQL є джерелом правди для постійного стану.
Операції з конкурентним доступом використовують транзакції та блокування. Redis допомагає з тимчасовою координацією, але не замінює базу.
3. Резерв має причину та строк життя
Тривалість резерву визначає серверний контракт конкретного flow. Не всі замовлення мають однаковий TTL.
Після оплати, скасування або expiry система змінює резерв і доступний баланс ідемпотентно, щоб повторна подія не списала товар двічі.