From 09e6b071868d219281fd849db23ce0f735b98e8e Mon Sep 17 00:00:00 2001 From: glax Date: Sat, 6 Sep 2025 16:31:16 +0200 Subject: [PATCH] LibrarConnector DTO and CreateLibraryConnectorRecord --- API/Controllers/DTOs/LibraryConnector.cs | 15 ++++++++++ API/Controllers/LibraryConnectorController.cs | 29 ++++++++++++++----- .../LibraryConnectors/LibraryConnector.cs | 9 ------ 3 files changed, 36 insertions(+), 17 deletions(-) create mode 100644 API/Controllers/DTOs/LibraryConnector.cs diff --git a/API/Controllers/DTOs/LibraryConnector.cs b/API/Controllers/DTOs/LibraryConnector.cs new file mode 100644 index 0000000..9f5bf88 --- /dev/null +++ b/API/Controllers/DTOs/LibraryConnector.cs @@ -0,0 +1,15 @@ +using System.ComponentModel.DataAnnotations; +using API.Schema.LibraryContext.LibraryConnectors; + +namespace API.Controllers.DTOs; + +public record LibraryConnector(string Key, string BaseUrl, LibraryType Type) : Identifiable(Key) +{ + [StringLength(256)] + [Required] + [Url] + public string BaseUrl {get; init;} = BaseUrl; + + [Required] + public LibraryType Type { get; init; } = Type; +} \ No newline at end of file diff --git a/API/Controllers/LibraryConnectorController.cs b/API/Controllers/LibraryConnectorController.cs index 389771b..ac4ff48 100644 --- a/API/Controllers/LibraryConnectorController.cs +++ b/API/Controllers/LibraryConnectorController.cs @@ -5,6 +5,8 @@ using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using static Microsoft.AspNetCore.Http.StatusCodes; +using LibraryConnector = API.Controllers.DTOs.LibraryConnector; + // ReSharper disable InconsistentNaming namespace API.Controllers; @@ -15,7 +17,7 @@ namespace API.Controllers; public class LibraryConnectorController(LibraryContext context) : Controller { /// - /// Gets all configured + /// Gets all configured /// /// /// Error during Database Operation @@ -25,8 +27,10 @@ public class LibraryConnectorController(LibraryContext context) : Controller { if (await context.LibraryConnectors.ToListAsync(HttpContext.RequestAborted) is not { } connectors) return TypedResults.InternalServerError(); - - return TypedResults.Ok(connectors); + + List libraryConnectors = connectors.Select(c => new LibraryConnector(c.Key, c.BaseUrl, c.LibraryType)).ToList(); + + return TypedResults.Ok(libraryConnectors); } /// @@ -43,26 +47,35 @@ public class LibraryConnectorController(LibraryContext context) : Controller if (await context.LibraryConnectors.FirstOrDefaultAsync(l => l.Key == LibraryConnectorId) is not { } connector) return TypedResults.NotFound(nameof(LibraryConnectorId)); - return TypedResults.Ok(connector); + return TypedResults.Ok(new LibraryConnector(connector.Key, connector.BaseUrl, connector.LibraryType)); } /// /// Creates a new /// - /// + /// /// /// Error during Database Operation [HttpPut] [ProducesResponseType(Status201Created, "text/plain")] [ProducesResponseType(Status500InternalServerError, "text/plain")] - public async Task, InternalServerError>> CreateConnector ([FromBody]LibraryConnector libraryConnector) + public async Task, InternalServerError>> CreateConnector ([FromBody]CreateLibraryConnectorRecord requestData) { - context.LibraryConnectors.Add(libraryConnector); + //TODO verify data + API.Schema.LibraryContext.LibraryConnectors.LibraryConnector connector = requestData.LibraryType switch + { + LibraryType.Kavita => new Kavita(requestData.Url, requestData.Username, requestData.Password), + LibraryType.Komga => new Komga(requestData.Url, requestData.Username, requestData.Password), + _ => throw new NotImplementedException() + }; + + context.LibraryConnectors.Add(connector); if(await context.Sync(HttpContext.RequestAborted) is { success: false } result) return TypedResults.InternalServerError(result.exceptionMessage); - return TypedResults.Created(string.Empty, libraryConnector.Key); + return TypedResults.Created(string.Empty, connector.Key); } + public sealed record CreateLibraryConnectorRecord(LibraryType LibraryType, string Url, string Username, string Password); /// /// Deletes with diff --git a/API/Schema/LibraryContext/LibraryConnectors/LibraryConnector.cs b/API/Schema/LibraryContext/LibraryConnectors/LibraryConnector.cs index 6b267cf..236e152 100644 --- a/API/Schema/LibraryContext/LibraryConnectors/LibraryConnector.cs +++ b/API/Schema/LibraryContext/LibraryConnectors/LibraryConnector.cs @@ -9,18 +9,9 @@ namespace API.Schema.LibraryContext.LibraryConnectors; [PrimaryKey("Key")] public abstract class LibraryConnector : Identifiable { - [Required] public LibraryType LibraryType { get; init; } - [StringLength(256)] - [Required] - [Url] public string BaseUrl { get; init; } - [StringLength(256)] - [Required] public string Auth { get; init; } - - [JsonIgnore] - [NotMapped] protected ILog Log { get; init; } protected LibraryConnector(LibraryType libraryType, string baseUrl, string auth)