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)