AKHN: marketplace с командами, заказами, спорами и документами
Backend-разработка marketplace-платформы: команды, роли, заказы, отклики, споры, WebSocket-коммуникации, уведомления, генерация документов через Handlebars и хранение файлов в MinIO.
AKHN - marketplace для взаимодействия заказчиков и исполнителей. Пользователи могли создавать команды, размещать заказы, отправлять отклики, общаться, закрывать работы и переходить в спорные сценарии с подключением сторон к заказу.
На таких проектах опасность обычно не в CRUD, а в правах и состояниях. Один и тот же пользователь может быть заказчиком, лидером команды, участником команды или стороной спора. Если проверки доступа размазаны по контроллерам, система быстро становится непредсказуемой.
Моя роль
Я занимался backend-разработкой и проектированием ключевых модулей marketplace.
Основные зоны:
- жизненный цикл заказов: создание, отклик, принятие, выполнение, закрытие и спор;
- командная модель: лидер, участники, реквизиты, ограничения количества команд;
- проверки прав для откликов, выполнения заказов и доступа к данным;
- уведомления через очереди и межсервисное взаимодействие;
- WebSocket-коммуникации с Redis для комнат и участников;
- генерация юридических документов по шаблонам Handlebars;
- хранение документов и файлов в MinIO;
- Swagger-документация и DTO validation.
Архитектура и решения
Backend развивался как NestJS monorepo с разделением на модули. Для обмена событиями использовались Redis Pub/Sub и очереди, чтобы уведомления и фоновые операции не блокировали пользовательские сценарии.
Логику заказов я старался держать ближе к домену: статусы, допустимые переходы, права и побочные эффекты не должны жить в одном большом сервисе. Особенно это было важно для споров и командной работы, где права зависят не только от роли пользователя, но и от его отношения к конкретному заказу.
Что было нетривиальным
Самое чувствительное место - связка “команда -> заказ -> отклик -> спор”. Например, отклик может отправить не любой участник, а только лидер команды; выполнять заказ может только назначенная команда; спор должен открывать другой набор действий и уведомлений.
Документы тоже были частью бизнес-процесса, а не просто приложенными файлами. Для них нужно было генерировать юридические шаблоны, хранить результат и контролировать доступ.
Результат
Проект получил backend-основу для marketplace с командами, заказами, спорами, чатами, документами и уведомлениями. Этот кейс хорошо показывает мой опыт проектирования backend, где ключевая сложность находится в бизнес-правилах, а не в количестве endpoint'ов.