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();
}
}