Files
nashel-backend/README.md

113 lines
6.6 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 (PostGIS) · Docker**
Серверная часть платформы **Nashel** — инновационного маркетплейса для поиска и найма профессиональных исполнителей. Бэкенд построен по принципу **Модульного Монолита**, что обеспечивает идеальный баланс между скоростью разработки и чистотой архитектуры с четкой доменной изоляцией.
---
## 🎯 Миссия Nashel
Мы создаем прозрачную экосистему, где мастера получают профессиональный инструментарий для ведения бизнеса, а клиенты — надежный сервис поиска по геолокации, реальным отзывам и защищенным сделкам.
**Ключевые преимущества:**
- **Гео-центричность:** Поиск исполнителей в радиусе на карте.
- **Интеллектуальный статус:** Проверка доступности мастера в реальном времени.
- **Безопасность:** Проработанный жизненный цикл заказа с системой споров.
- **Репутация:** Честная система отзывов, привязанная к реальным сделкам.
---
## 🧱 Архитектура и Технологии
Проект реализован как **Modular Monolith**. Каждый модуль — это изолированная единица со своей логикой, данными и API, взаимодействующая с другими через контракты BuildingBlocks.
### Технологический стек
- **Runtime:** .NET 8 / ASP.NET Core
- **Database:** PostgreSQL + **PostGIS** (гео-запросы)
- **ORM:** Entity Framework Core
- **Messaging:** MediatR (In-process commands/queries)
- **Security:** JWT Authentication, Role-based Access Control
- **Spatial:** NetTopologySuite
### Структура модуля
```
Modules/<Module>/
├── Domain/ # Сущности, Value Objects, Доменные события
├── Application/ # Use Cases (MediatR Handlers), DTOs, Mapping
├── Infrastructure/ # EF Core (Persistence), External Services
└── Presentation/ # Minimal API Endpoints
```
---
## 🚀 Реализованные Модули
| Модуль | Статус | Функционал |
|--------|--------|------------|
| **Identity** | ✅ Ready | Auth (JWT), Профили, Аватары (Base64), Расписание, Статусы доступности |
| **Catalog** | ✅ Ready | Управление услугами (CRUD), Multi-image (до 10 фото), Атрибуты |
| **Search** | ✅ Ready | Full-text search, сортировка по Geo-дистанции и релевантности |
| **Geo** | ✅ Ready | Расчет расстояний, Геозоны, Индексация координат |
| **Order** | ✅ Ready | Заказы (Direct/Public), SLA таймеры, Система споров (Disputes), Отклики |
| **Reputation** | ✅ Ready | Отзывы, Рейтинги (User/Offer), Дополнения к отзывам |
| **Collaboration**| ✅ Ready | HR-инструментарий: Найм, Наложение вето на расписание, Проверки |
---
## ⚙️ Ключевая Логика
### 1. Умная доступность (Smart Status)
Мастер может управлять своей доступностью двумя способами:
- **Расписание:** Настройка рабочих дней и часов.
- **Manual Toggle:** Ручное переключение статуса «Готов к заказу». Ручная активация имеет приоритет и действует до конца текущего дня, перекрывая стандартное расписание.
### 2. Жизненный цикл заказа (Order Flow)
Реализована сложная машина состояний:
1. **Создание:** Прямой заказ мастеру или публикация заявки в общий доступ.
2. **SLA:** Для прямых заказов действует 60-минутный таймер на принятие.
3. **Исполнение:** Статусы "В работе", "Выполнено", "Подтверждено".
4. **Споры (Disputes):** Многоэтапный процесс разрешения конфликтов (Открытие -> Ответ мастера -> Возражение клиента -> Принятие условий).
### 3. Поиск и Геолокация
- Поиск учитывает не только текст, но и **расстояние**.
- В приоритете — конкретные услуги. Если мастер не имеет услуг, он показывается как специалист.
- Интеграция с PostGIS позволяет делать сверхбыстрые выборки в радиусе.
---
## 🐳 Развертывание
### Docker (Рекомендуемо)
```bash
docker-compose up -d --build
```
Это запустит:
- Бэкенд (порт 5000)
- PostgreSQL + PostGIS (порт 5432)
### Локальный запуск
1. Установите PostgreSQL и расширение PostGIS.
2. Обновите строку подключения в `appsettings.json`.
3. Примените миграции:
```bash
dotnet ef database update -p src/Host -s src/Host
```
4. Запустите Host:
```bash
dotnet run --project src/Host
```
Swagger доступен по адресу: `http://localhost:5000/swagger`
---
## 🔮 Планы развития
- [ ] **Real-time:** Интеграция WebSockets для чатов и уведомлений.
- [ ] **Verification:** Модуль проверки документов исполнителей.
- [ ] **Finances:** Интеграция платежных шлюзов.
- [ ] **Analytics:** Сбор метрик просмотров и конверсий для мастеров.
- [ ] **Mobile SDK:** API для нативных мобильных приложений.
- [ ] **Notifications:** Push и Email уведомления о статусах заказов.