Перейти к содержимому
Все проекты

E-commerce · Интеграция с ERP

E-commerce на базе ERP

Один e-commerce backend для двух магазинов одежды — Ojuk Bujuk и Alfinur — работающий прямо поверх ERP-базы каждого клиента в MSSQL, с админ-панелями на Nuxt.

Моя роль
Full-stack разработчик: backend, админ-панели и деплой.
Стек
  • AdonisJS
  • TypeScript
  • MSSQL
  • Socket.IO
  • Nuxt
  • PM2

Задача

Товары, цены и скидки магазинов уже хранились в ERP клиента. Отдельный каталог означал бы двойной ввод данных и устаревшие цены.

Архитектура

E-commerce на базе ERP — Схема архитектурыStorefrontcustomersAdmin panelNuxt · VuetifyAdonisJS APIJWT · ordersERP databaseMSSQL · products, pricesApp tablesusers · ordersSMS gatewayphone via Socket.IO
API (AdonisJS 5, Lucid ORM) читает данные каталога из существующих таблиц ERP и владеет только своими таблицами для пользователей, заказов, избранного и кодов подтверждения. Через канал Socket.IO подключён Android-телефон, который отправляет одноразовые коды и уведомления о заказах по SMS. Админ-панели на Nuxt управляют тем, что показывает витрина. Один и тот же код развёрнут для обоих магазинов.

Ключевые решения

  1. 01Таблицы ERP как каталог

    Почему
    Чтение товаров и цен прямо из ERP полностью убирает синхронизацию — магазин всегда показывает то, что есть в учёте. Приложение добавляет только собственные таблицы.
    Компромисс
    API связан со схемой ERP, а запросы каталога идут к учётной базе.
  2. 02Телефон в роли SMS-шлюза

    Почему
    Вместо внешнего SMS-провайдера коды и уведомления о заказах отправляет Android-телефон, подключённый через Socket.IO, — через местную мобильную сеть.
    Компромисс
    Доставка зависит от того, что телефон онлайн и подключён.
  3. 03Один код — несколько магазинов

    Почему
    Оба магазина используют общий backend и шаблон админки; различия вроде атрибутов товаров или вложенных категорий — это возможности одной платформы.

Что я сделал

  • API на AdonisJS (TypeScript), читающий товары, цены и скидки прямо из таблиц ERP в MSSQL
  • Регистрация по телефону с одноразовыми кодами; SMS отправляет телефон-шлюз, подключённый через Socket.IO
  • JWT access- и refresh-токены с отдельными guard-ами для покупателей и администраторов
  • Заказы создаются в транзакциях, включая анонимные заказы
  • Админ-панели на Nuxt 2 + Vuetify; CI/CD через GitHub Actions, деплой по SSH и PM2