🔮 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)
- Аналитика для исполнителей (просмотры, конверсии)