Enhance user and media management with sorting and statistics: add sorting options to user and media listing endpoints, implement media statistics retrieval, and update frontend components for sorting and displaying media processing times. Refactor related query handlers and API types to support new features.
build / backend (push) Successful in 1m35s
build / frontend (push) Successful in 31s
tests / backend-tests (push) Successful in 1m48s

This commit is contained in:
Leonid Pershin
2026-07-26 00:28:22 +03:00
parent d6ad8e11a4
commit 64a2dade74
27 changed files with 1634 additions and 39 deletions
@@ -40,6 +40,8 @@ public static class AdminUserEndpoints
string? search,
Guid? roleId,
bool? isBlocked,
string? sort,
bool desc,
ISender sender,
CancellationToken cancellationToken
)
@@ -50,7 +52,9 @@ public static class AdminUserEndpoints
pageSize <= 0 ? 20 : pageSize,
search,
roleId,
isBlocked
isBlocked,
sort,
desc
),
cancellationToken
);
@@ -8,6 +8,7 @@ using TeleWave.Application.Media.Delete;
using TeleWave.Application.Media.GetMedia;
using TeleWave.Application.Media.ListMedia;
using TeleWave.Application.Media.Register;
using TeleWave.Application.Media.Stats;
using TeleWave.Domain.Media;
using TeleWave.Infrastructure.Identity;
using TeleWave.Infrastructure.Media;
@@ -24,6 +25,7 @@ public static class MediaEndpoints
admin.MapPost("", Upload).Produces<UploadMediaResponse>(StatusCodes.Status201Created);
admin.MapGet("", List).Produces<PagedList<MediaAssetDto>>();
admin.MapGet("/stats", Stats).Produces<MediaStatsDto>();
admin.MapGet("/{id:guid}", Get).Produces<MediaAssetDto>();
admin.MapDelete("/{id:guid}", Delete).Produces(StatusCodes.Status204NoContent);
@@ -100,6 +102,8 @@ public static class MediaEndpoints
int pageSize,
MediaAssetStatus[]? status,
string? search,
string? sort,
bool desc,
ISender sender,
CancellationToken cancellationToken
)
@@ -109,13 +113,21 @@ public static class MediaEndpoints
page <= 0 ? 1 : page,
pageSize <= 0 ? 20 : pageSize,
status ?? [],
search
search,
sort,
desc
),
cancellationToken
);
return Results.Ok(result);
}
private static async Task<IResult> Stats(ISender sender, CancellationToken cancellationToken)
{
var result = await sender.Send(new GetMediaStatsQuery(), cancellationToken);
return Results.Ok(result);
}
private static async Task<IResult> Get(
Guid id,
ISender sender,