6.6 KiB
🔮 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)
Реализована сложная машина состояний:
- Создание: Прямой заказ мастеру или публикация заявки в общий доступ.
- SLA: Для прямых заказов действует 60-минутный таймер на принятие.
- Исполнение: Статусы "В работе", "Выполнено", "Подтверждено".
- Споры (Disputes): Многоэтапный процесс разрешения конфликтов (Открытие -> Ответ мастера -> Возражение клиента -> Принятие условий).
3. Поиск и Геолокация
- Поиск учитывает не только текст, но и расстояние.
- В приоритете — конкретные услуги. Если мастер не имеет услуг, он показывается как специалист.
- Интеграция с PostGIS позволяет делать сверхбыстрые выборки в радиусе.
🐳 Развертывание
Docker (Рекомендуемо)
docker-compose up -d --build
Это запустит:
- Бэкенд (порт 5000)
- PostgreSQL + PostGIS (порт 5432)
Локальный запуск
- Установите PostgreSQL и расширение PostGIS.
- Обновите строку подключения в
appsettings.json. - Примените миграции:
dotnet ef database update -p src/Host -s src/Host - Запустите Host:
dotnet run --project src/Host
Swagger доступен по адресу: http://localhost:5000/swagger
🔮 Планы развития
- Real-time: Интеграция WebSockets для чатов и уведомлений.
- Verification: Модуль проверки документов исполнителей.
- Finances: Интеграция платежных шлюзов.
- Analytics: Сбор метрик просмотров и конверсий для мастеров.
- Mobile SDK: API для нативных мобильных приложений.
- Notifications: Push и Email уведомления о статусах заказов.