34 lines
1.2 KiB
C#
34 lines
1.2 KiB
C#
using ErsatzTV.Application.LibraryBrowse;
|
|
using ErsatzTV.Core.Api.LibraryBrowse;
|
|
using MediatR;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
|
|
namespace ErsatzTV.Controllers.Api;
|
|
|
|
[ApiController]
|
|
public class LibraryBrowseController(IMediator mediator) : ControllerBase
|
|
{
|
|
private const int MaxPageSize = 100;
|
|
|
|
[HttpGet("/api/library/browse", Name = "BrowseLibrary")]
|
|
[Tags("Libraries")]
|
|
[EndpointSummary("Browse and search library items")]
|
|
[EndpointGroupName("general")]
|
|
[ProducesResponseType(typeof(PagedLibraryBrowseItemsResponseModel), StatusCodes.Status200OK)]
|
|
public async Task<PagedLibraryBrowseItemsResponseModel> Browse(
|
|
[FromQuery] string query = "",
|
|
[FromQuery] int? libraryId = null,
|
|
[FromQuery] LibraryBrowseMediaType? mediaType = null,
|
|
[FromQuery] int pageNum = 0,
|
|
[FromQuery] int pageSize = 100,
|
|
CancellationToken cancellationToken = default)
|
|
{
|
|
int clampedPageNum = Math.Max(0, pageNum);
|
|
int clampedPageSize = Math.Clamp(pageSize, 1, MaxPageSize);
|
|
return await mediator.Send(
|
|
new GetLibraryBrowseItems(query, libraryId, mediaType, clampedPageNum, clampedPageSize),
|
|
cancellationToken);
|
|
}
|
|
}
|