# Tnsu.ApprovalRoute Сервис маршрутов согласования: типы заявок (`RequestType`) и шаблонные маршруты согласования (`TemplateRoute` → `TemplateRouteStep`) с разрешением подходящего маршрута под конкретные параметры (проект, тип заявки, сумма и т.д.). Архитектура повторяет [tnsu-inventory](../tnsu-inventory): 4 слоя (Api / Application / Domain / Infrastructure), MediatR-стиль сервисов, EF Core + PostgreSQL. ## Стек | Компонент | Технология | |-----------|------------| | Backend | .NET 10, ASP.NET Core (MVC controllers), EF Core | | БД | PostgreSQL | | Авторизация | Entra ID (JWT Bearer) либо dev-схема (`X-Dev-User-Email`) при отсутствии конфигурации Entra | | API-документация | Scalar (`/scalar`) на основе OpenAPI | | Интеграция | `api.tnsu.kz` (портал 1С) | | Frontend | SPFx-веб-парт (React + FluentUI) — админка маршрутов согласования на портале SharePoint | ## Структура ``` backend/ Directory.Build.props # общие настройки таргета (net10.0, nullable, etc.) Directory.Packages.props # централизованные версии пакетов Tnsu.ApprovalRoute.sln src/ Tnsu.ApprovalRoute.Domain/ # сущности и enum'ы домена Tnsu.ApprovalRoute.Application/ # сервисы, DTO, валидаторы Tnsu.ApprovalRoute.Infrastructure/ # EF Core DbContext, миграции, клиент tnsu-portal Tnsu.ApprovalRoute.Api/ # ASP.NET Core Controllers, Program.cs, авторизация tests/ Tnsu.ApprovalRoute.IntegrationTests/ frontend/ src/webparts/approvalAdmin/ # SPFx веб-парт «ApprovalAdmin» (React, FluentUI) docker-compose.yml ``` ## Frontend (SPFx) Админка маршрутов согласования встраивается веб-частью SPFx на портал SharePoint (аналогично `tnsu-inventory`). ```bash cd frontend npm install npm run start # heft start — локальный SharePoint Workbench npm run build # heft test + package-solution --production ``` Свойства веб-части: `apiBaseUrl`, `useDevAuth`, `devUserEmail`, `aadResourceId`, `portalBaseUrl`. ## API | Метод | Путь | Описание | |-------|------|----------| | CRUD | `/api/request-types` | Типы заявок | | CRUD | `/api/template-routes` | Шаблонные маршруты согласования | | GET | `/api/template-routes/resolve` | Подбор подходящего маршрута по параметрам | | CRUD | `/api/template-routes/{routeId}/steps` | Шаги шаблонного маршрута | | GET | `/health` | Health-check | ## Запуск локально ```bash cd backend dotnet run --project src/Tnsu.ApprovalRoute.Api ``` Требуется PostgreSQL (строка подключения — `ConnectionStrings:Postgres` в `appsettings.json`). Авторизация: - Entra ID — задать `Entra:TenantId` и `Entra:Audience` в конфигурации - Без Entra — используется dev-схема, текущий пользователь передаётся заголовком `X-Dev-User-Email` После запуска документация API доступна на `/scalar`. ## Запуск через Docker Compose ```bash cp .env.example .env docker compose up --build ``` Поднимает `postgres` и `api`. | Сервис | URL | |--------|-----| | API | http://localhost:8082 | | API health | http://localhost:8082/health | | Postgres | localhost:5435 | ## Тесты ```bash cd backend dotnet test ```