gorbenko.pavel 0adb6d0e58
Tests / frontend-test (pull_request) Successful in 50s
Tests / backend-test (pull_request) Successful in 9m38s
Убраны предупреждения сборки бэкенда
NU1903: транзитивная Microsoft.OpenApi 2.0.0 (GHSA-v5pm-xwqc-g5wc, high)
запиннена на 2.7.5 — первая исправленная версия; работает через уже
включённый CentralPackageTransitivePinningEnabled, как и Newtonsoft.Json.

NU1510: убран PackageReference Microsoft.Extensions.Http из Infrastructure —
пакет приходит из общего фреймворка по FrameworkReference
Microsoft.AspNetCore.App, AddHttpClient продолжает работать.

ASPDEPR005: KnownNetworks -> KnownIPNetworks.

CS8604 (x5): Warning имеет тип string?, и Shouldly не сужает его после
ShouldNotBeNull — значение сохраняется в локальную переменную.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-24 17:02:30 +05:00
2026-08-13 04:44:08 +00:00
2026-08-13 04:44:08 +00:00
2026-08-13 04:44:08 +00:00

Tnsu.ApprovalRoute

Сервис маршрутов согласования: типы заявок (RequestType) и шаблонные маршруты согласования (TemplateRoute → TemplateRouteStep) с разрешением подходящего маршрута под конкретные параметры (проект, тип заявки, сумма и т.д.).

Архитектура повторяет 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
  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).

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

Запуск локально

cd backend
dotnet run --project Tnsu.ApprovalRoute.Api

Требуется PostgreSQL (строка подключения — ConnectionStrings:Postgres в appsettings.json).

Авторизация:

  • Entra ID — задать Entra:TenantId и Entra:Audience в конфигурации
  • Без Entra — используется dev-схема, текущий пользователь передаётся заголовком X-Dev-User-Email

После запуска документация API доступна на /scalar.

Запуск через Docker Compose

cp .env.example .env
docker compose up --build

Поднимает postgres и api.

Сервис URL
API http://localhost:8082
API health http://localhost:8082/health
Postgres localhost:5435

Тесты

cd backend
dotnet test
S
Description
No description provided
Readme 5.7 MiB
Languages
C# 57.2%
TypeScript 38.1%
SCSS 3.3%
PowerShell 1.2%