113 lines
6.6 KiB
Markdown
113 lines
6.6 KiB
Markdown
# 🔮 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 уведомления о статусах заказов.
|