Собственный продукт. Задача: связать интернет-магазин с учётной системой так, чтобы менеджер больше не переносил заказы руками. Заказы должны сами создаваться в МойСклад или Xero вместе с клиентом, скидками, НДС и доставкой, оплаты отмечаться в учёте, а остатки и цены возвращаться в магазин. Главное требование: интеграция не должна молча терять заказы и плодить дубли.
Сделал сервис на NestJS с очередями BullMQ и панелью на Next.js. Четыре коннектора работают на одном интерфейсе: WooCommerce REST, Shopify GraphQL, МойСклад JSON API 1.2 и Xero с OAuth 2.0 и обновлением токенов. Шесть потоков: заказ, оплата, остатки, цены, новые товары, обновление каталога с автосопоставлением по артикулу и штрихкоду.
Больше всего работы ушло на случаи, когда что-то идёт не так. Каждая операция записана с запросом и ответом (ключи замаскированы), ошибка объяснена обычными словами и подсказывает, что сделать. Дубли отсекаются на трёх уровнях: id доставки вебхука, ключ операции и поиск документа в учёте. При лимитах провайдера задача ждёт и продолжает сама, после нескольких неудач попадает в список ошибок с кнопкой «Повторить» и алертом в Telegram. Если в учёте нет товара, заказ встаёт на паузу: достаточно один раз выбрать пару, и все ждущие заказы уйдут сами. Сверка по расписанию находит заказы, вебхуки которых не дошли.
- 4 коннектора и 6 потоков данных между магазином и учётом
- Защита от дублей на трёх уровнях и сверка пропущенных вебхуков
- Ограничение частоты запросов под лимиты каждого провайдера
- Панель на 8 экранов: обзор с графиками, живой журнал, ошибки, конфликты, маппинг, подключения, алерты; светлая и тёмная тема, RU/EN
- 130+ тестов, включая сквозной от вебхука до документа в учёте
- Демо без регистрации: встроенный эмулятор API присылает заказы и иногда «падает», поэтому на панели видна живая работа
- Запуск одной командой docker compose up, CI в GitHub Actions