139 lines
7.4 KiB
Markdown
139 lines
7.4 KiB
Markdown
# 🔮 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
|
||
|
||
```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)
|
||
- [ ] Аналитика для исполнителей (просмотры, конверсии)
|