Добавить фильтр по title в GET /api/request-types/lists #24
@@ -20,10 +20,14 @@ public sealed class RequestTypeListsController(ListPartitionService service) : C
|
|||||||
/// заявкам сразу во всех партициях (архив + текущая) любого типа, не нужно
|
/// заявкам сразу во всех партициях (архив + текущая) любого типа, не нужно
|
||||||
/// запрашивать серию по каждому типу отдельно.
|
/// запрашивать серию по каждому типу отдельно.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
/// <param name="title">
|
||||||
|
/// Необязательный фильтр по заголовку партиции (Title списка SharePoint),
|
||||||
|
/// без учёта регистра, по вхождению подстроки.
|
||||||
|
/// </param>
|
||||||
[HttpGet("lists")]
|
[HttpGet("lists")]
|
||||||
[ProducesResponseType(typeof(ApiResponse<IReadOnlyList<RequestTypeListSeriesDto>>), StatusCodes.Status200OK)]
|
[ProducesResponseType(typeof(ApiResponse<IReadOnlyList<RequestTypeListSeriesDto>>), StatusCodes.Status200OK)]
|
||||||
public async Task<IActionResult> ListAll(CancellationToken ct) =>
|
public async Task<IActionResult> ListAll([FromQuery] string? title, CancellationToken ct) =>
|
||||||
(await service.ListAllAsync(ct)).ToActionResult();
|
(await service.ListAllAsync(title, ct)).ToActionResult();
|
||||||
|
|
||||||
/// <summary>Вся серия партиций одного типа заявок (архив + текущая), от первой к последней.</summary>
|
/// <summary>Вся серия партиций одного типа заявок (архив + текущая), от первой к последней.</summary>
|
||||||
[HttpGet("{requestTypeId:int}/lists")]
|
[HttpGet("{requestTypeId:int}/lists")]
|
||||||
|
|||||||
@@ -78,7 +78,12 @@ public sealed class ListPartitionService(
|
|||||||
/// адресов один раз, а не по одному запросу на тип. Типы без настроенного
|
/// адресов один раз, а не по одному запросу на тип. Типы без настроенного
|
||||||
/// списка SharePoint в ответ не попадают — искать там всё равно нечего.
|
/// списка SharePoint в ответ не попадают — искать там всё равно нечего.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public async Task<Result<IReadOnlyList<RequestTypeListSeriesDto>>> ListAllAsync(CancellationToken cancellationToken)
|
/// <param name="title">
|
||||||
|
/// Необязательный фильтр по заголовку партиции (Title списка SharePoint),
|
||||||
|
/// без учёта регистра, по вхождению подстроки. null — фильтр не применяется.
|
||||||
|
/// </param>
|
||||||
|
public async Task<Result<IReadOnlyList<RequestTypeListSeriesDto>>> ListAllAsync(
|
||||||
|
string? title, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var requestTypes = await db.RequestTypes
|
var requestTypes = await db.RequestTypes
|
||||||
.Where(x => x.ListId != null && x.SiteUrl != null)
|
.Where(x => x.ListId != null && x.SiteUrl != null)
|
||||||
@@ -88,6 +93,14 @@ public sealed class ListPartitionService(
|
|||||||
foreach (var requestType in requestTypes)
|
foreach (var requestType in requestTypes)
|
||||||
{
|
{
|
||||||
var partitions = await BuildSeriesAsync(requestType, cancellationToken);
|
var partitions = await BuildSeriesAsync(requestType, cancellationToken);
|
||||||
|
|
||||||
|
if (!string.IsNullOrWhiteSpace(title))
|
||||||
|
partitions = partitions
|
||||||
|
.Where(x => x.Title is not null && x.Title.Contains(title, StringComparison.OrdinalIgnoreCase))
|
||||||
|
.ToList();
|
||||||
|
|
||||||
|
if (partitions.Count == 0) continue;
|
||||||
|
|
||||||
result.Add(new RequestTypeListSeriesDto(requestType.Id, partitions));
|
result.Add(new RequestTypeListSeriesDto(requestType.Id, partitions));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -72,8 +72,8 @@ export class ApprovalRouteApi {
|
|||||||
// ListPartitionService.ListAllAsync) — для дашборда (счётчик партиций) и
|
// ListPartitionService.ListAllAsync) — для дашборда (счётчик партиций) и
|
||||||
// портала, которому нужен весь список адресов разом, а не по одному запросу
|
// портала, которому нужен весь список адресов разом, а не по одному запросу
|
||||||
// на тип.
|
// на тип.
|
||||||
listsAll: (): Promise<RequestTypeListSeries[]> =>
|
listsAll: (title?: string): Promise<RequestTypeListSeries[]> =>
|
||||||
this.http.get<RequestTypeListSeries[]>('/api/request-types/lists'),
|
this.http.get<RequestTypeListSeries[]>('/api/request-types/lists', { title }),
|
||||||
|
|
||||||
// Вся серия партиций ОДНОГО типа заявки (архив + текущая) — нужна экрану
|
// Вся серия партиций ОДНОГО типа заявки (архив + текущая) — нужна экрану
|
||||||
// редактирования заявок: заявка может лежать в любой из них, не только в
|
// редактирования заявок: заявка может лежать в любой из них, не только в
|
||||||
|
|||||||
Reference in New Issue
Block a user