28 июл. 2026 г.

AKHN: marketplace с командами, заказами, спорами и документами

Backend-разработка marketplace-платформы: команды, роли, заказы, отклики, споры, WebSocket-коммуникации, уведомления, генерация документов через Handlebars и хранение файлов в MinIO.

TypeScriptApollo ClientPostgreSQLRedisBullMQWebSocketDrizzle ORMDDDCASL

AKHN - marketplace для взаимодействия заказчиков и исполнителей. Пользователи могли создавать команды, размещать заказы, отправлять отклики, общаться, закрывать работы и переходить в спорные сценарии с подключением сторон к заказу.

На таких проектах опасность обычно не в CRUD, а в правах и состояниях. Один и тот же пользователь может быть заказчиком, лидером команды, участником команды или стороной спора. Если проверки доступа размазаны по контроллерам, система быстро становится непредсказуемой.

Моя роль

Я занимался backend-разработкой и проектированием ключевых модулей marketplace.

Основные зоны:

  • жизненный цикл заказов: создание, отклик, принятие, выполнение, закрытие и спор;
  • командная модель: лидер, участники, реквизиты, ограничения количества команд;
  • проверки прав для откликов, выполнения заказов и доступа к данным;
  • уведомления через очереди и межсервисное взаимодействие;
  • WebSocket-коммуникации с Redis для комнат и участников;
  • генерация юридических документов по шаблонам Handlebars;
  • хранение документов и файлов в MinIO;
  • Swagger-документация и DTO validation.

Архитектура и решения

Backend развивался как NestJS monorepo с разделением на модули. Для обмена событиями использовались Redis Pub/Sub и очереди, чтобы уведомления и фоновые операции не блокировали пользовательские сценарии.

Логику заказов я старался держать ближе к домену: статусы, допустимые переходы, права и побочные эффекты не должны жить в одном большом сервисе. Особенно это было важно для споров и командной работы, где права зависят не только от роли пользователя, но и от его отношения к конкретному заказу.

Что было нетривиальным

Самое чувствительное место - связка “команда -> заказ -> отклик -> спор”. Например, отклик может отправить не любой участник, а только лидер команды; выполнять заказ может только назначенная команда; спор должен открывать другой набор действий и уведомлений.

Документы тоже были частью бизнес-процесса, а не просто приложенными файлами. Для них нужно было генерировать юридические шаблоны, хранить результат и контролировать доступ.

Результат

Проект получил backend-основу для marketplace с командами, заказами, спорами, чатами, документами и уведомлениями. Этот кейс хорошо показывает мой опыт проектирования backend, где ключевая сложность находится в бизнес-правилах, а не в количестве endpoint'ов.

Комментарии

Пока нет комментариев — будьте первым.