using API.Schema.LibraryContext; using API.Schema.LibraryContext.LibraryConnectors; using Asp.Versioning; using Microsoft.AspNetCore.Http.HttpResults; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using static Microsoft.AspNetCore.Http.StatusCodes; // ReSharper disable InconsistentNaming namespace API.Controllers; [ApiVersion(2)] [ApiController] [Route("v{v:apiVersion}/[controller]")] public class LibraryConnectorController(LibraryContext context) : Controller { /// /// Gets all configured /// /// /// Error during Database Operation [HttpGet] [ProducesResponseType>(Status200OK, "application/json")] public async Task>, InternalServerError>> GetAllConnectors () { if (await context.LibraryConnectors.ToListAsync(HttpContext.RequestAborted) is not { } connectors) return TypedResults.InternalServerError(); return TypedResults.Ok(connectors); } /// /// Returns with /// /// .Key /// /// with not found. [HttpGet("{LibraryConnectorId}")] [ProducesResponseType(Status200OK, "application/json")] [ProducesResponseType(Status404NotFound, "text/plain")] public async Task, NotFound>> GetConnector (string LibraryConnectorId) { if (await context.LibraryConnectors.FirstOrDefaultAsync(l => l.Key == LibraryConnectorId) is not { } connector) return TypedResults.NotFound(nameof(LibraryConnectorId)); return TypedResults.Ok(connector); } /// /// Creates a new /// /// /// /// Error during Database Operation [HttpPut] [ProducesResponseType(Status201Created, "text/plain")] [ProducesResponseType(Status500InternalServerError, "text/plain")] public async Task, InternalServerError>> CreateConnector ([FromBody]LibraryConnector libraryConnector) { context.LibraryConnectors.Add(libraryConnector); if(await context.Sync(HttpContext.RequestAborted) is { success: false } result) return TypedResults.InternalServerError(result.exceptionMessage); return TypedResults.Created(string.Empty, libraryConnector.Key); } /// /// Deletes with /// /// ToFileLibrary-Connector-ID /// /// with not found. /// Error during Database Operation [HttpDelete("{LibraryConnectorId}")] [ProducesResponseType(Status200OK)] [ProducesResponseType(Status404NotFound, "text/plain")] [ProducesResponseType(Status500InternalServerError, "text/plain")] public async Task, InternalServerError>> DeleteConnector (string LibraryConnectorId) { if (await context.LibraryConnectors.FirstOrDefaultAsync(l => l.Key == LibraryConnectorId) is not { } connector) return TypedResults.NotFound(nameof(LibraryConnectorId)); context.LibraryConnectors.Remove(connector); if(await context.Sync(HttpContext.RequestAborted) is { success: false } result) return TypedResults.InternalServerError(result.exceptionMessage); return TypedResults.Ok(); } }