From 73b8d68a090df643de8681aa68872fb93b37444a Mon Sep 17 00:00:00 2001 From: Jason Dove <1695733+jasongdove@users.noreply.github.com> Date: Thu, 4 Sep 2025 11:36:26 -0500 Subject: [PATCH] add existing api endpoints to scalar docs (#2374) --- ErsatzTV/Controllers/Api/ChannelController.cs | 3 +++ ErsatzTV/Controllers/Api/LibrariesController.cs | 7 ++++++- ErsatzTV/Controllers/Api/MaintenanceController.cs | 5 +++++ ErsatzTV/Controllers/Api/SessionController.cs | 5 +++++ ErsatzTV/Controllers/Api/VersionController.cs | 3 +++ ErsatzTV/Startup.cs | 10 ++++++---- 6 files changed, 28 insertions(+), 5 deletions(-) diff --git a/ErsatzTV/Controllers/Api/ChannelController.cs b/ErsatzTV/Controllers/Api/ChannelController.cs index d7e42fbf1..0a20a0689 100644 --- a/ErsatzTV/Controllers/Api/ChannelController.cs +++ b/ErsatzTV/Controllers/Api/ChannelController.cs @@ -18,6 +18,9 @@ public class ChannelController(ChannelWriter workerCh public async Task> GetAll() => await mediator.Send(new GetAllChannelsForApi()); [HttpPost("/api/channels/{channelNumber}/playout/reset")] + [Tags("Channels")] + [EndpointSummary("Reset channel playout")] + [EndpointGroupName("general")] public async Task ResetPlayout(string channelNumber) { Option maybePlayoutId = await mediator.Send(new GetPlayoutIdByChannelNumber(channelNumber)); diff --git a/ErsatzTV/Controllers/Api/LibrariesController.cs b/ErsatzTV/Controllers/Api/LibrariesController.cs index 516aa81d7..efeadd1ae 100644 --- a/ErsatzTV/Controllers/Api/LibrariesController.cs +++ b/ErsatzTV/Controllers/Api/LibrariesController.cs @@ -6,15 +6,20 @@ using Microsoft.AspNetCore.Mvc; namespace ErsatzTV.Controllers.Api; [ApiController] +[EndpointGroupName("general")] public class LibrariesController(ITelevisionRepository televisionRepository, IMediator mediator) { [HttpPost("/api/libraries/{id:int}/scan")] - public async Task ResetPlayout(int id) => + [Tags("Libraries")] + [EndpointSummary("Scan library")] + public async Task ScanLibrary(int id) => await mediator.Send(new QueueLibraryScanByLibraryId(id)) ? new OkResult() : new NotFoundResult(); [HttpPost("/api/libraries/{id:int}/scan-show")] + [Tags("Libraries")] + [EndpointSummary("Scan show")] public async Task ScanShow(int id, [FromBody] ScanShowRequest request) { if (string.IsNullOrWhiteSpace(request.ShowTitle)) diff --git a/ErsatzTV/Controllers/Api/MaintenanceController.cs b/ErsatzTV/Controllers/Api/MaintenanceController.cs index 301ee4efe..048e65728 100644 --- a/ErsatzTV/Controllers/Api/MaintenanceController.cs +++ b/ErsatzTV/Controllers/Api/MaintenanceController.cs @@ -6,9 +6,12 @@ using Microsoft.AspNetCore.Mvc; namespace ErsatzTV.Controllers.Api; [ApiController] +[EndpointGroupName("general")] public class MaintenanceController(IMediator mediator) { [HttpGet("/api/maintenance/gc")] + [Tags("Maintenance")] + [EndpointSummary("Garbage collect")] public async Task GarbageCollection([FromQuery] bool force = false) { await mediator.Send(new ReleaseMemory(force)); @@ -16,6 +19,8 @@ public class MaintenanceController(IMediator mediator) } [HttpPost("/api/maintenance/empty_trash")] + [Tags("Maintenance")] + [EndpointSummary("Empty trash")] public async Task EmptyTrash() { Either result = await mediator.Send(new EmptyTrash()); diff --git a/ErsatzTV/Controllers/Api/SessionController.cs b/ErsatzTV/Controllers/Api/SessionController.cs index dd5b3fc6d..29508bacc 100644 --- a/ErsatzTV/Controllers/Api/SessionController.cs +++ b/ErsatzTV/Controllers/Api/SessionController.cs @@ -5,12 +5,17 @@ using Microsoft.AspNetCore.Mvc; namespace ErsatzTV.Controllers.Api; [ApiController] +[EndpointGroupName("general")] public class SessionController(IFFmpegSegmenterService ffmpegSegmenterService) { [HttpGet("api/sessions")] + [Tags("Sessions")] + [EndpointSummary("Get sessions")] public List GetSessions() => ffmpegSegmenterService.Workers.Map(w => w.GetModel()).ToList(); [HttpDelete("api/session/{channelNumber}")] + [Tags("Sessions")] + [EndpointSummary("Stop session")] public async Task StopSession(string channelNumber, CancellationToken cancellationToken) { if (await ffmpegSegmenterService.StopChannel(channelNumber, cancellationToken)) diff --git a/ErsatzTV/Controllers/Api/VersionController.cs b/ErsatzTV/Controllers/Api/VersionController.cs index d24397bcd..5cd1a1884 100644 --- a/ErsatzTV/Controllers/Api/VersionController.cs +++ b/ErsatzTV/Controllers/Api/VersionController.cs @@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Mvc; namespace ErsatzTV.Controllers.Api; [ApiController] +[EndpointGroupName("general")] public class VersionController { private static readonly string Version; @@ -14,5 +15,7 @@ public class VersionController .InformationalVersion ?? "unknown"; [HttpGet("/api/version")] + [Tags("Version")] + [EndpointSummary("Get version")] public string GetVersion() => Version; } diff --git a/ErsatzTV/Startup.cs b/ErsatzTV/Startup.cs index eec2fa4fd..142a1d21c 100644 --- a/ErsatzTV/Startup.cs +++ b/ErsatzTV/Startup.cs @@ -145,10 +145,11 @@ public class Startup services.AddDataProtection().PersistKeysToFileSystem(new DirectoryInfo(FileSystemLayout.DataProtectionFolder)); - services.AddOpenApi("scripted-schedule", options => - { - options.ShouldInclude += a => a.GroupName == "scripted-schedule"; - }); + services.AddOpenApi("v1", options => { options.ShouldInclude += a => a.GroupName == "general"; }); + + services.AddOpenApi( + "scripted-schedule", + options => { options.ShouldInclude += a => a.GroupName == "scripted-schedule"; }); OidcHelper.Init(Configuration); JwtHelper.Init(Configuration); @@ -602,6 +603,7 @@ public class Startup endpoints.MapScalarApiReference("/docs", options => { options.AddDocument("scripted-schedule", "Scripted Schedule", "openapi/scripted-schedule.json"); + options.AddDocument("v1", "General", "openapi/v1.json"); options.HideClientButton = true; options.Title = "ErsatzTV API Reference"; });