Продавец торговал на двух маркетплейсах и в своём Telegram-боте, склад при этом был один - коробки на одном стеллаже.
Остатки правили руками, каждую площадку по отдельности, обычно вечером после отгрузок.
За день одна и та же позиция успевала уйти в двух местах, и приходил оверсел - заказ на товар, которого физически уже нет.
Дальше отмена, просадка рейтинга продавца и разбирательство с покупателем.
Заказы собирали, переключаясь между личными кабинетами и ботом, часть отгрузок уезжала за срок.
Задача стояла свести площадки в одно окно и убрать ручную сверку остатков.
Сделал связующий сервис между складом продавца и площадками.
Один товар - одна карточка на своей стороне, к ней привязаны артикулы всех площадок, где он продаётся.
Любое движение остатка ставит задачу в очередь, и она разъезжается по площадкам через их API.
Заказы стягиваются по расписанию в общий список, остаток резервируется в момент появления заказа, до сборки.
Статус отгрузки и трек-номер так-же уходят обратно на площадку из этого же окна.
Каждый обмен пишется в лог целиком - что отправили, что ответили, с каким кодом.
Упавшие запросы повторяются с нарастающей паузой, очередь держит ограничение по скорости, чтобы не упереться в лимит площадки.
Если запрос не прошёл несколько раз подряд, в Telegram падает уведомление с товаром и площадкой.
Отдельная кнопка отправляет остатки заново - по одному товару или по всему складу.
Под капотом - Python, FastAPI, PostgreSQL, очередь на Celery и Redis, всё в Docker на VPS.
Площадки вынесены в адаптеры с общим интерфейсом, то-есть подключение третьей это один новый класс поверх готовой синхронизации.
Оверселлы почти прекратились - после продажи в своём боте остаток уходит на площадки сразу, после продажи на площадке в ближайший опрос заказов.
Сборка идёт по одному списку, площадка у каждого заказа подписана, ходить по кабинетам больше не нужно.
Вечерняя сверка остатков ушла целиком, это вернуло продавцу примерно час в день.
Заказчику ушёл код, панель и описание того, как подключается новая площадка.
Через месяц после сдачи подключили третью - на неё ушло два дня вместе с тестами, сама синхронизация при этом не менялась.