using ErsatzTV.Application.MediaCollections; using ErsatzTV.Core.Api.MediaCollections; using MediatR; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; namespace ErsatzTV.Controllers.Api; [ApiController] public class PlaylistController(IMediator mediator) : ControllerBase { [HttpGet("/api/playlists/groups", Name = "GetPlaylistGroups")] [Tags("Playlists")] [EndpointSummary("Get all playlist groups")] [EndpointGroupName("general")] [ProducesResponseType(typeof(List), StatusCodes.Status200OK)] public async Task> GetGroups(CancellationToken cancellationToken) { List groups = await mediator.Send(new GetAllPlaylistGroups(), cancellationToken); return groups.Map(g => new PlaylistGroupResponseModel(g.Id, g.Name, g.PlaylistCount, g.IsSystem)).ToList(); } [HttpGet("/api/playlists", Name = "GetPlaylists")] [Tags("Playlists")] [EndpointSummary("Get playlists in a playlist group")] [EndpointDescription("Returns the playlists in the given playlist group.")] [EndpointGroupName("general")] [ProducesResponseType(typeof(List), StatusCodes.Status200OK)] public async Task> GetAll( [FromQuery] int playlistGroupId, CancellationToken cancellationToken) { List playlists = await mediator.Send(new GetPlaylistsByPlaylistGroupId(playlistGroupId), cancellationToken); return playlists.Map(p => new PlaylistResponseModel(p.Id, p.PlaylistGroupId, p.Name, p.IsSystem)).ToList(); } }