Один backend на Go для магазина Rowshen — сайта, админ-панели и мобильного приложения: каталог, заказы, магазины и контент, организованные в независимые доменные модули.
Моя роль
Backend-разработчик. Разработал API, модель данных, аутентификацию и функции админки.
Стек
Go
Echo
GORM
PostgreSQL
JWT
Swagger
Задача
Магазину нужен был один backend для нескольких клиентов: каталог по категориям, коллекциям, сезонам и типам товаров, надёжное оформление заказов и админка для команды, ведущей контент на русском и туркменском.
Архитектура
Сайт, админ-панель и мобильное приложение используют один REST API на Echo с PostgreSQL через GORM. Каждый домен — товары, категории, коллекции, заказы, пользователи, магазины, баннеры, гайды — отдельный модуль со своими слоями handler, service и repository. Заказ и его позиции записываются одной транзакцией.
Ключевые решения
01Один API для трёх клиентов
Почему
Бизнес-правила — цены, наличие, процесс заказа — живут в одном месте, поэтому сайт, админ-панель и мобильное приложение не расходятся в поведении.
Компромисс
Изменения API должны оставаться обратно совместимыми: обновления мобильного приложения доходят до пользователей позже, чем деплой сайта.
02Модуль на домен, три слоя в каждом
Почему
Handler отвечает за HTTP, service — за бизнес-правила, repository — за SQL. Десяток доменов остаются независимыми: каждый легко тестировать и расширять, не затрагивая остальные.
Компромисс
Больше файлов и шаблонного кода для простого CRUD.
03Атомарная запись заказов
Почему
Заказ и его позиции создаются и обновляются одной транзакцией, поэтому сбой никогда не оставит заказ без товаров или с частичными суммами.
Что я сделал
Единый REST API для сайта, админ-панели и мобильного приложения
Каталог по категориям, коллекциям, сезонам и типам товаров
Заказы и их позиции записываются внутри транзакций
JWT-аутентификация для покупателей и администраторов с ролями, хэширование паролей bcrypt
Магазины с часами работы, баннеры и двуязычные (RU/TK) гайды
Swagger-документация всего API
В цифрах
клиента на одном API: сайт, админ-панель, мобильное приложение