Feature/request type access (#23)
Tests / frontend-test (push) Successful in 49s
Tests / backend-test (push) Successful in 1m38s

Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/23
This commit was merged in pull request #23.
This commit is contained in:
2026-09-25 11:48:02 +00:00
parent 1bf8d4ca11
commit a8bfd9f456
20 changed files with 1067 additions and 2 deletions
@@ -0,0 +1,44 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Tnsu.ApprovalRoute.Api.Auth;
using Tnsu.ApprovalRoute.Api.Common;
using Tnsu.ApprovalRoute.Application.RequestTypeAccesses;
namespace Tnsu.ApprovalRoute.Api.Controllers;
/// <summary>
/// Настройка доступа «видеть все заявки типа», а не только свои. Список
/// email'ов по типу дёргает и портал заявок (проверить текущего пользователя),
/// и Power Automate — поэтому политика AnyAuth, как у RemindersController.
/// </summary>
[ApiController]
[Authorize(Policy = AuthPolicies.Any)]
[Route("api/request-type-access")]
[Produces("application/json")]
public sealed class RequestTypeAccessController(RequestTypeAccessService service) : ControllerBase
{
[HttpGet]
[ProducesResponseType(typeof(ApiResponse<IReadOnlyList<RequestTypeAccessDto>>), StatusCodes.Status200OK)]
public async Task<IActionResult> List([FromQuery] int? requestTypeId, CancellationToken ct) =>
(await service.ListAsync(requestTypeId, ct)).ToActionResult();
[HttpGet("{requestTypeId:int}/emails")]
[ProducesResponseType(typeof(ApiResponse<IReadOnlyList<string>>), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ApiError), StatusCodes.Status404NotFound)]
public async Task<IActionResult> ListEmails(int requestTypeId, CancellationToken ct) =>
(await service.ListEmailsAsync(requestTypeId, ct)).ToActionResult();
[HttpPost]
[ProducesResponseType(typeof(ApiResponse<RequestTypeAccessDto>), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ApiError), StatusCodes.Status400BadRequest)]
[ProducesResponseType(typeof(ApiError), StatusCodes.Status404NotFound)]
[ProducesResponseType(typeof(ApiError), StatusCodes.Status409Conflict)]
public async Task<IActionResult> Create(CreateRequestTypeAccessRequest body, CancellationToken ct) =>
(await service.CreateAsync(body, ct)).ToActionResult();
[HttpDelete("{id:int}")]
[ProducesResponseType(StatusCodes.Status204NoContent)]
[ProducesResponseType(typeof(ApiError), StatusCodes.Status404NotFound)]
public async Task<IActionResult> Delete(int id, CancellationToken ct) =>
(await service.DeleteAsync(id, ct)).ToActionResult();
}