Как работает

Покупка в Витрине

  1. Покупатель оформил заказ → создаём в МС customerorder
  2. Заказ оплачен → создаём в МС demand (отгрузка) с полем store
  3. МС списывает остаток на этом складе

Покупка в МС (оффлайн/другой канал)

  1. Продавец пробивает товар в МС → создаётся demand
  2. Webhook → Витрина пересчитывает остатки
  3. Если остаток стал 0 → статус товара archived на витрине

Отмена/возврат

  • Из Витрины: удаляем demand в МС → остаток возвращается
  • Из МС: удаляешь demand → webhook → Витрина обновляет остаток

Поле store

Указывает на склад в МС. Без него demand создаст задваивание остатков на разных складах.

Настройка: в подключении МС выбираешь default_store. Применяется ко всем заказам магазина.

Advisory lock

Только один воркер синхронизирует одновременно (PG advisory lock на shop_id). Защита от race-condition при массовых изменениях.

Параллельный синк

Разные магазины синхронизируются параллельно через asyncio.gather. 10 магазинов = 10 одновременных синков, не 10 подряд.