feat(api): add media sources and scan status endpoints (#103 #106)

This commit is contained in:
2026-07-03 23:02:58 +02:00
parent abd8ca34c9
commit 1b7b0e549a
15 changed files with 561 additions and 1 deletions
@@ -1,14 +1,23 @@
using ErsatzTV.Application.Libraries;
using ErsatzTV.Core.Api.Libraries;
using ErsatzTV.Core.Interfaces.Repositories;
using MediatR;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace ErsatzTV.Controllers.Api;
[ApiController]
[EndpointGroupName("general")]
public class LibrariesController(ITelevisionRepository televisionRepository, IMediator mediator)
public class LibrariesController(ITelevisionRepository televisionRepository, IMediator mediator) : ControllerBase
{
[HttpGet("/api/libraries/scan-status", Name = "GetLibraryScanStatus")]
[Tags("Libraries")]
[EndpointSummary("Get active library scan status")]
[ProducesResponseType(typeof(List<LibraryScanStatusResponseModel>), StatusCodes.Status200OK)]
public async Task<List<LibraryScanStatusResponseModel>> GetScanStatus(CancellationToken cancellationToken) =>
await mediator.Send(new GetLibraryScanStatus(), cancellationToken);
[HttpPost("/api/libraries/{id:int}/scan")]
[Tags("Libraries")]
[EndpointSummary("Scan library")]
@@ -0,0 +1,19 @@
using ErsatzTV.Application.MediaSources;
using ErsatzTV.Core.Api.MediaSources;
using MediatR;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace ErsatzTV.Controllers.Api;
[ApiController]
public class MediaSourcesController(IMediator mediator) : ControllerBase
{
[HttpGet("/api/media-sources", Name = "GetMediaSources")]
[Tags("Media Sources")]
[EndpointSummary("Get all media sources with their libraries")]
[EndpointGroupName("general")]
[ProducesResponseType(typeof(List<MediaSourceResponseModel>), StatusCodes.Status200OK)]
public async Task<List<MediaSourceResponseModel>> GetAll(CancellationToken cancellationToken) =>
await mediator.Send(new GetAllMediaSourcesForApi(), cancellationToken);
}