Как работает
Покупка в Витрине
- Покупатель оформил заказ → создаём в МС customerorder
- Заказ оплачен → создаём в МС demand (отгрузка) с полем
store - МС списывает остаток на этом складе
Покупка в МС (оффлайн/другой канал)
- Продавец пробивает товар в МС → создаётся demand
- Webhook → Витрина пересчитывает остатки
- Если остаток стал 0 → статус товара
archivedна витрине
Отмена/возврат
- Из Витрины: удаляем demand в МС → остаток возвращается
- Из МС: удаляешь demand → webhook → Витрина обновляет остаток
Поле store
Указывает на склад в МС. Без него demand создаст задваивание остатков на разных складах.
Настройка: в подключении МС выбираешь default_store. Применяется ко всем заказам магазина.
Advisory lock
Только один воркер синхронизирует одновременно (PG advisory lock на shop_id). Защита от race-condition при массовых изменениях.
Параллельный синк
Разные магазины синхронизируются параллельно через asyncio.gather. 10 магазинов = 10 одновременных синков, не 10 подряд.