Архивация списков (#13)
Tests / frontend-test (push) Successful in 44s
Tests / backend-test (push) Failing after 17m4s

Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/13
This commit was merged in pull request #13.
This commit is contained in:
2026-08-19 09:08:36 +00:00
parent a2672042d7
commit 82512eb1db
56 changed files with 2587 additions and 51 deletions
@@ -0,0 +1,47 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Tnsu.ApprovalRoute.Api.Common;
using Tnsu.ApprovalRoute.Application.ListPartitioning;
namespace Tnsu.ApprovalRoute.Api.Controllers;
/// <summary>
/// Нумерованная серия партиций SharePoint-списка по типу заявок: куда писать сейчас
/// и вся серия для админки/портала.
/// </summary>
[ApiController]
[Authorize]
[Route("api/request-types")]
[Produces("application/json")]
public sealed class RequestTypeListsController(ListPartitionService service) : ControllerBase
{
/// <summary>
/// Серии партиций ВСЕХ типов заявок разом — для портала: чтобы искать по
/// заявкам сразу во всех партициях (архив + текущая) любого типа, не нужно
/// запрашивать серию по каждому типу отдельно.
/// </summary>
[HttpGet("lists")]
[ProducesResponseType(typeof(ApiResponse<IReadOnlyList<RequestTypeListSeriesDto>>), StatusCodes.Status200OK)]
public async Task<IActionResult> ListAll(CancellationToken ct) =>
(await service.ListAllAsync(ct)).ToActionResult();
/// <summary>Вся серия партиций одного типа заявок (архив + текущая), от первой к последней.</summary>
[HttpGet("{requestTypeId:int}/lists")]
[ProducesResponseType(typeof(ApiResponse<IReadOnlyList<RequestListPartitionDto>>), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ApiError), StatusCodes.Status404NotFound)]
public async Task<IActionResult> List(int requestTypeId, CancellationToken ct) =>
(await service.ListAsync(requestTypeId, ct)).ToActionResult();
/// <summary>
/// Партиция, в которую нужно писать новые заявки этого типа.
///
/// Не чистый GET: если партиция добрала порог элементов, запрос ставит в очередь
/// фоновую задачу создания следующей (см. ListPartitionService.GetCurrentAsync).
/// </summary>
[HttpGet("{requestTypeId:int}/lists/current")]
[ProducesResponseType(typeof(ApiResponse<CurrentListPartitionDto>), StatusCodes.Status200OK)]
[ProducesResponseType(typeof(ApiError), StatusCodes.Status400BadRequest)]
[ProducesResponseType(typeof(ApiError), StatusCodes.Status404NotFound)]
public async Task<IActionResult> Current(int requestTypeId, CancellationToken ct) =>
(await service.GetCurrentAsync(requestTypeId, ct)).ToActionResult();
}