feat: эндпоинт заявок по основанию (СТ/потребность) с проверкой прав на открытие
Tests / backend-test (pull_request) Successful in 2m10s
Tests / frontend-test (pull_request) Successful in 3m53s

GET /api/basis-requests?requestTypeId=&basisKey= читает заявки от имени приложения
по всем партициям, а по каждой проверяет, может ли вызывающий её открыть.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
gorbenko.pavel
2026-10-28 09:58:42 +05:00
parent f3b0f0ad48
commit a46782920b
6 changed files with 286 additions and 0 deletions
@@ -0,0 +1,31 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Tnsu.ApprovalRoute.Api.Auth;
using Tnsu.ApprovalRoute.Api.Common;
using Tnsu.ApprovalRoute.Application.BasisRequests;
namespace Tnsu.ApprovalRoute.Api.Controllers;
/// <summary>
/// Заявки, поданные по одному основанию (СТ, потребность). Видны все, независимо
/// от прав вызывающего на элементы; CanOpen говорит, может ли он открыть заявку.
/// Только пользовательский токен: без email права проверять не для кого.
/// </summary>
[ApiController]
[Authorize(Policy = AuthPolicies.Delegated)]
[Route("api/basis-requests")]
[Produces("application/json")]
public sealed class BasisRequestsController(BasisRequestsService service) : ControllerBase
{
/// <summary>Заявки типа requestTypeId с BasisKey = basisKey по всем партициям.</summary>
[HttpGet]
[ProducesResponseType(typeof(ApiResponse<IReadOnlyList<BasisRequestDto>>), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ApiError), StatusCodes.Status404NotFound)]
[ProducesResponseType(typeof(ApiError), StatusCodes.Status400BadRequest)]
public async Task<IActionResult> Get(
[FromQuery] int requestTypeId,
// string? — пустой параметр фронтенд вырезает из URL целиком (см. RequestManageController.Search).
[FromQuery] string? basisKey,
CancellationToken ct) =>
(await service.GetByBasisAsync(requestTypeId, basisKey ?? string.Empty, ct)).ToActionResult();
}