# 🔮 Nashel — Backend API > **ASP.NET Core · Modular Monolith · PostgreSQL · Docker** Серверная часть платформы **Nashel** — маркетплейса для поиска и найма профессиональных исполнителей (мастеров, специалистов и компаний). Бэкенд построен по принципу **Модульного Монолита** с чёткой доменной изоляцией. --- ## 🎯 Какую проблему решает Nashel В России огромное количество мастеров и специалистов, которые работают «по сарафанному радио» — без нормальных инструментов для привлечения клиентов. А клиенты, в свою очередь, тратят время на поиск через знакомых или ненадёжные сайты объявлений. **Nashel** — это: - Удобный и быстрый поиск исполнителей **рядом с тобой** на карте - Прозрачная система услуг с ценами, фото и описанием - Система репутации и отзывов - Безопасное взаимодействие клиента и исполнителя --- ## 👤 Роли пользователей | Роль | Описание | |------|----------| | **Клиент** | Ищет услуги на карте, просматривает профили исполнителей, оставляет заявки | | **Кандидат в мастера** | Зарегистрировался как исполнитель, проходит верификацию | | **Мастер** | Верифицированный исполнитель — частный специалист, самозанятый | | **Компания** | Юридическое лицо, предоставляющее услуги через платформу | --- ## 🧱 Архитектура Проект реализован как **Modular Monolith** — единое приложение, разделённое на изолированные модули с чёткими границами. Каждый модуль содержит: ``` Modules// ├── 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 ```bash # Запуск базы данных и бэкенда docker-compose up -d --build ``` Настройки в `docker-compose.yml` (строка подключения, порты, переменные окружения). --- ## ⚙️ Локальный запуск ```bash 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) - [ ] Аналитика для исполнителей (просмотры, конверсии)