using API.Schema.LibraryContext; using API.Schema.LibraryContext.LibraryConnectors; using Asp.Versioning; 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 GetAllConnectors () { if (await context.LibraryConnectors.ToArrayAsync(HttpContext.RequestAborted) is not { } connectors) return StatusCode(Status500InternalServerError); return Ok(connectors); } /// /// Returns with /// /// .Key /// /// with not found. [HttpGet("{LibraryConnectorId}")] [ProducesResponseType(Status200OK, "application/json")] [ProducesResponseType(Status404NotFound)] public async Task GetConnector (string LibraryConnectorId) { if (await context.LibraryConnectors.FirstOrDefaultAsync(l => l.Key == LibraryConnectorId) is not { } connector) return NotFound(); return Ok(connector); } /// /// Creates a new /// /// /// /// Error during Database Operation [HttpPut] [ProducesResponseType(Status201Created)] [ProducesResponseType(Status500InternalServerError, "text/plain")] public async Task CreateConnector ([FromBody]LibraryConnector libraryConnector) { context.LibraryConnectors.Add(libraryConnector); if(await context.Sync(HttpContext.RequestAborted) 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 async Task DeleteConnector (string LibraryConnectorId) { if (await context.LibraryConnectors.FirstOrDefaultAsync(l => l.Key == LibraryConnectorId) is not { } connector) return NotFound(); context.LibraryConnectors.Remove(connector); if(await context.Sync(HttpContext.RequestAborted) is { success: false } result) return StatusCode(Status500InternalServerError, result.exceptionMessage); return Ok(); } }