using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Tnsu.ApprovalRoute.Api.Common; using Tnsu.ApprovalRoute.Application.TemplateRoutes; namespace Tnsu.ApprovalRoute.Api.Controllers; [ApiController] [Authorize] [Route("api/template-routes")] [Produces("application/json")] public sealed class TemplateRoutesController(TemplateRouteService service) : ControllerBase { // POST, а не GET: запрос принимает список условий (field_name/value) переменной длины, // который не ложится на плоскую query-строку без индексной эквилибристики. Единственный // потребитель — диагностический экран «Проверка маршрута» в админке, внешних вызовов нет. [HttpPost("resolve")] [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)] [ProducesResponseType(typeof(ApiError), StatusCodes.Status400BadRequest)] [ProducesResponseType(typeof(ApiError), StatusCodes.Status404NotFound)] public async Task Resolve([FromBody] ResolveTemplateRouteRequest request, CancellationToken ct) => (await service.ResolveAsync(request, ct)).ToActionResult(); [HttpGet] [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)] public async Task List([FromQuery] int? requestTypeId, CancellationToken ct) => (await service.ListAsync(requestTypeId, ct)).ToActionResult(); [HttpGet("{id:int}")] [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)] [ProducesResponseType(typeof(ApiError), StatusCodes.Status404NotFound)] public async Task Get(int id, CancellationToken ct) => (await service.GetAsync(id, ct)).ToActionResult(); [HttpPost] [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)] [ProducesResponseType(typeof(ApiError), StatusCodes.Status400BadRequest)] [ProducesResponseType(typeof(ApiError), StatusCodes.Status404NotFound)] [ProducesResponseType(typeof(ApiError), StatusCodes.Status409Conflict)] public async Task Create(CreateTemplateRouteRequest body, CancellationToken ct) => (await service.CreateAsync(body, ct)).ToActionResult(); [HttpPut("{id:int}")] [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)] [ProducesResponseType(typeof(ApiError), StatusCodes.Status400BadRequest)] [ProducesResponseType(typeof(ApiError), StatusCodes.Status404NotFound)] [ProducesResponseType(typeof(ApiError), StatusCodes.Status409Conflict)] public async Task Update(int id, UpdateTemplateRouteRequest body, CancellationToken ct) => (await service.UpdateAsync(id, body, ct)).ToActionResult(); [HttpPatch("{id:int}")] [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)] [ProducesResponseType(typeof(ApiError), StatusCodes.Status400BadRequest)] [ProducesResponseType(typeof(ApiError), StatusCodes.Status404NotFound)] [ProducesResponseType(typeof(ApiError), StatusCodes.Status409Conflict)] public async Task Patch(int id, PatchTemplateRouteRequest body, CancellationToken ct) => (await service.PatchAsync(id, body, ct)).ToActionResult(); [HttpDelete("{id:int}")] [ProducesResponseType(StatusCodes.Status204NoContent)] [ProducesResponseType(typeof(ApiError), StatusCodes.Status404NotFound)] public async Task Delete(int id, CancellationToken ct) => (await service.DeleteAsync(id, ct)).ToActionResult(); }