Files
nashel-backend/README.md
T

139 lines
7.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🔮 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)
- [ ] Аналитика для исполнителей (просмотры, конверсии)