Skip to the content.

📐 Архитектура проекта

← Назад на главную

AgroPlatform построен на основе Clean Architecture с применением паттернов CQRS и Multi-Tenancy.


🗂️ Структура решения

src/
├── AgroPlatform.Api/            — Web API, контроллеры, middleware, Swagger
├── AgroPlatform.Application/    — CQRS handlers, DTOs, validators, пагинация
├── AgroPlatform.Domain/         — Доменные модели, enums
└── AgroPlatform.Infrastructure/ — EF Core, PostgreSQL, Identity, JWT, interceptors

frontend/
├── src/api/          — Axios клиент
├── src/components/   — UI компоненты
├── src/pages/        — Страницы модулей
├── src/stores/       — Zustand
└── src/types/        — TypeScript типы

tests/
├── AgroPlatform.UnitTests/
└── AgroPlatform.IntegrationTests/

🏛️ Слои бэкенда

AgroPlatform.Domain

Самый внутренний слой — не зависит ни от чего.

AgroPlatform.Application

Слой бизнес-логики, зависит только от Domain.

AgroPlatform.Infrastructure

Реализация инфраструктурных интерфейсов.

AgroPlatform.Api

Точка входа в приложение.


🔄 CQRS + MediatR

Каждая операция описывается как команда или запрос:

Request (Command/Query)
    ↓
MediatR Pipeline
    ↓ ValidationBehavior (FluentValidation)
    ↓
Handler
    ↓
Repository / DbContext
    ↓
Response (DTO)

Пример команды: CreateWarehouseCommand → CreateWarehouseHandler → AppDbContext → WarehouseDto


🏢 Multi-Tenancy

Платформа поддерживает multi-tenancy на уровне строк данных (Row-Level Security через EF Core Query Filters).

Принцип работы:

  1. Клиент отправляет заголовок X-Tenant-Id: <uuid>
  2. TenantMiddleware записывает TenantId в HttpContext.Items["TenantId"]
  3. TenantService читает TenantId из HttpContext.Items
  4. AppDbContext захватывает _tenantId из ITenantService при конструировании
  5. OnModelCreating применяет глобальный фильтр для всех AuditableEntity:
    entity.HasQueryFilter(e => !e.IsDeleted && e.TenantId == _tenantId)
    

Важные нюансы:


🌐 Frontend

SPA на React 18 + TypeScript, взаимодействует с API через Axios.

Ключевые библиотеки:

Библиотека Назначение
React 18 UI фреймворк
TypeScript 5 Типизация
Vite Сборщик
Ant Design 5 UI компоненты
Zustand Управление состоянием
Recharts Графики и аналитика
Leaflet Карты полей
Axios HTTP клиент

Маршрутизация (страницы):


🧪 Тестирование

Юнит-тесты (AgroPlatform.UnitTests)

Интеграционные тесты (AgroPlatform.IntegrationTests)


← Назад на главную