# 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С) | ## Структура ``` 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/ docker-compose.yml ``` Отдельного frontend в этом репозитории нет — сервис предоставляет только backend API. ## 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 ```