Files
nashel-backend/README.md

6.6 KiB
Raw Permalink Blame History

🔮 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 (Рекомендуемо)

docker-compose up -d --build

Это запустит:

  • Бэкенд (порт 5000)
  • PostgreSQL + PostGIS (порт 5432)

Локальный запуск

  1. Установите PostgreSQL и расширение PostGIS.
  2. Обновите строку подключения в appsettings.json.
  3. Примените миграции:
    dotnet ef database update -p src/Host -s src/Host
    
  4. Запустите Host:
    dotnet run --project src/Host
    

Swagger доступен по адресу: http://localhost:5000/swagger


🔮 Планы развития

  • Real-time: Интеграция WebSockets для чатов и уведомлений.
  • Verification: Модуль проверки документов исполнителей.
  • Finances: Интеграция платежных шлюзов.
  • Analytics: Сбор метрик просмотров и конверсий для мастеров.
  • Mobile SDK: API для нативных мобильных приложений.
  • Notifications: Push и Email уведомления о статусах заказов.