using API.Schema.LibraryContext; using API.Schema.LibraryContext.LibraryConnectors; using Asp.Versioning; using Microsoft.AspNetCore.Mvc; using static Microsoft.AspNetCore.Http.StatusCodes; // ReSharper disable InconsistentNaming namespace API.Controllers; [ApiVersion(2)] [ApiController] [Route("v{v:apiVersion}/[controller]")] public class LibraryConnectorController(IServiceScope scope) : Controller { /// /// Gets all configured /// /// [HttpGet] [ProducesResponseType(Status200OK, "application/json")] public IActionResult GetAllConnectors() { LibraryContext context = scope.ServiceProvider.GetRequiredService(); LibraryConnector[] connectors = context.LibraryConnectors.ToArray(); return Ok(connectors); } /// /// Returns with /// /// .Key /// /// with not found. [HttpGet("{LibraryConnectorId}")] [ProducesResponseType(Status200OK, "application/json")] [ProducesResponseType(Status404NotFound)] public IActionResult GetConnector(string LibraryConnectorId) { LibraryContext context = scope.ServiceProvider.GetRequiredService(); if (context.LibraryConnectors.Find(LibraryConnectorId) is not { } connector) return NotFound(); return Ok(connector); } /// /// Creates a new /// /// /// /// Error during Database Operation [HttpPut] [ProducesResponseType(Status201Created)] [ProducesResponseType(Status500InternalServerError, "text/plain")] public IActionResult CreateConnector([FromBody]LibraryConnector libraryConnector) { LibraryContext context = scope.ServiceProvider.GetRequiredService(); context.LibraryConnectors.Add(libraryConnector); if(context.Sync().Result is { success: false } result) return StatusCode(Status500InternalServerError, result.exceptionMessage); return Created(); } /// /// Deletes with /// /// ToFileLibrary-Connector-ID /// /// with < not found. /// Error during Database Operation [HttpDelete("{LibraryConnectorId}")] [ProducesResponseType(Status200OK)] [ProducesResponseType(Status404NotFound)] [ProducesResponseType(Status500InternalServerError, "text/plain")] public IActionResult DeleteConnector(string LibraryConnectorId) { LibraryContext context = scope.ServiceProvider.GetRequiredService(); if (context.LibraryConnectors.Find(LibraryConnectorId) is not { } connector) return NotFound(); context.LibraryConnectors.Remove(connector); if(context.Sync().Result is { success: false } result) return StatusCode(Status500InternalServerError, result.exceptionMessage); return Ok(); } }