From c044532564d9f6bba767d08eed4839c074608428 Mon Sep 17 00:00:00 2001 From: glax Date: Tue, 22 Jul 2025 21:53:27 +0200 Subject: [PATCH] Add Maintenance Controller - CleanupNoDownloadManga --- API/Controllers/MaintenanceController.cs | 36 ++++++++++++++++++++++++ API/Controllers/MangaController.cs | 2 +- 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 API/Controllers/MaintenanceController.cs diff --git a/API/Controllers/MaintenanceController.cs b/API/Controllers/MaintenanceController.cs new file mode 100644 index 0000000..844bb6d --- /dev/null +++ b/API/Controllers/MaintenanceController.cs @@ -0,0 +1,36 @@ +using API.MangaConnectors; +using API.Schema.MangaContext; +using Asp.Versioning; +using Microsoft.AspNetCore.Mvc; +using Microsoft.EntityFrameworkCore; +using static Microsoft.AspNetCore.Http.StatusCodes; + +namespace API.Controllers; + +[ApiVersion(2)] +[ApiController] +[Route("v{v:apiVersion}/[controller]")] +public class MaintenanceController(MangaContext mangaContext) : Controller +{ + + /// + /// Removes all not marked for Download on any + /// + /// + /// Error during Database Operation + [HttpPost("CleanupNoDownloadManga")] + [ProducesResponseType(Status200OK)] + [ProducesResponseType(Status500InternalServerError, "text/plain")] + public IActionResult CleanupNoDownloadManga() + { + Manga[] noDownloads = mangaContext.Mangas + .Include(m => m.MangaConnectorIds) + .Where(m => !m.MangaConnectorIds.Any(id => id.UseForDownload)) + .ToArray(); + mangaContext.Mangas.RemoveRange(noDownloads); + + if(mangaContext.Sync() is { success: false } result) + return StatusCode(Status500InternalServerError, result.exceptionMessage); + return Ok(); + } +} \ No newline at end of file diff --git a/API/Controllers/MangaController.cs b/API/Controllers/MangaController.cs index a42c975..51afb1d 100644 --- a/API/Controllers/MangaController.cs +++ b/API/Controllers/MangaController.cs @@ -66,7 +66,7 @@ public class MangaController(MangaContext context) : Controller /// /// .Key /// - /// < with not found + /// with not found /// Error during Database Operation [HttpDelete("{MangaId}")] [ProducesResponseType(Status200OK)]