🔮 Nashel — Backend API

ASP.NET Core · Modular Monolith · PostgreSQL · Docker

Серверная часть платформы Nashel — маркетплейса для поиска и найма профессиональных исполнителей (мастеров, специалистов и компаний). Бэкенд построен по принципу Модульного Монолита с чёткой доменной изоляцией.


🎯 Какую проблему решает Nashel

В России огромное количество мастеров и специалистов, которые работают «по сарафанному радио» — без нормальных инструментов для привлечения клиентов. А клиенты, в свою очередь, тратят время на поиск через знакомых или ненадёжные сайты объявлений.

Nashel — это:

  • Удобный и быстрый поиск исполнителей рядом с тобой на карте
  • Прозрачная система услуг с ценами, фото и описанием
  • Система репутации и отзывов
  • Безопасное взаимодействие клиента и исполнителя

👤 Роли пользователей

Роль Описание
Клиент Ищет услуги на карте, просматривает профили исполнителей, оставляет заявки
Кандидат в мастера Зарегистрировался как исполнитель, проходит верификацию
Мастер Верифицированный исполнитель — частный специалист, самозанятый
Компания Юридическое лицо, предоставляющее услуги через платформу

🧱 Архитектура

Проект реализован как Modular Monolith — единое приложение, разделённое на изолированные модули с чёткими границами. Каждый модуль содержит:

Modules/<Module>/
├── Application/      # Команды, запросы, DTO (MediatR)
├── Domain/           # Сущности, бизнес-логика, интерфейсы репозиториев
├── Infrastructure/   # Реализация репозиториев, EF Core DbContext
└── Presentation/     # HTTP Endpoints (Minimal API)

Модули

Модуль Назначение
Identity Регистрация, авторизация (JWT), профиль, роли, аватар, геолокация, расписание
Catalog Управление услугами (CRUD), изображения, статусы, атрибуты
Geo Геозоны, расчёт расстояний (PostGIS / NetTopologySuite)
Search Полнотекстовый поиск по услугам и компетенциям с учётом геопозиции
Reputation Отзывы и рейтинги (в разработке)
Collaboration Заявки и взаимодействие клиент ↔ исполнитель (в разработке)
Order Заказы и их жизненный цикл (в разработке)

Host

Host/ — точка входа приложения. Здесь настраиваются DI, middleware, маршрутизация и сборка всех модулей.


Что реализовано

Аутентификация и профиль

  • Регистрация и вход по логину/паролю (JWT токены)
  • Смена пароля, обновление профиля
  • Загрузка аватара (хранится как base64 в БД)
  • Переход в роль исполнителя: описание, компетенции, геолокация

Геолокация

  • Привязка основного адреса и текущего местоположения
  • Расчёт расстояния до исполнителей с помощью PostGIS + NetTopologySuite
  • Геозоны для фильтрации исполнителей в радиусе

Услуги (Catalog)

  • Создание, редактирование, удаление (soft delete) услуг
  • Приостановка услуги (пауза)
  • Загрузка до 10 изображений (≤5 МБ каждое), хранение в БД
  • Атрибуты услуги (произвольные ключ-значение пары)
  • Первое изображение является обложкой

Поиск

  • Полнотекстовый поиск по: названию услуги, описанию, компетенциям
  • Результаты сортируются с учётом расстояния и релевантности
  • Исполнитель показывается в поиске только если у него нет найденных услуг (приоритет услуги над специалистом)
  • Приостановленные и удалённые услуги не отображаются
  • Возврат URL первого изображения услуги для превью в поиске

Расписание и статус доступности

  • Настройка рабочих дней и «всегда готов»
  • Умная логика статуса: ручное включение статуса «Готов к заказу» переопределяет расписание до конца текущего дня

🗄️ База данных

  • PostgreSQL с расширением PostGIS (геопространственные запросы)
  • Entity Framework Core (Code First, миграции)
  • Структура: таблица Accounts, Performers, Offers, Competencies и др.

🐳 Запуск через Docker

# Запуск базы данных и бэкенда
docker-compose up -d --build

Настройки в docker-compose.yml (строка подключения, порты, переменные окружения).


⚙️ Локальный запуск

cd nashel-backend

# Применить миграции
dotnet ef database update -p src/Host -s src/Host

# Запустить
dotnet run --project src/Host

Swagger UI доступен по адресу: http://localhost:5000/swagger


🔮 Планы развития

  • Полный модуль Collaboration: чат между клиентом и исполнителем
  • Модуль Order: жизненный цикл заказа, статусы, оплата
  • Модуль Reputation: система отзывов и рейтингов (реальные данные вместо заглушек)
  • Верификация документов исполнителя
  • Push-уведомления
  • Поддержка OAuth (VK, Google)
  • Аналитика для исполнителей (просмотры, конверсии)
Description
No description provided
Readme 737 KiB
Languages
C# 99.8%
Dockerfile 0.2%