using AutoMapper; using LANCommander.Server.Data.Models; using LANCommander.Server.Extensions; using LANCommander.Server.Models; using LANCommander.Server.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; namespace LANCommander.Server.Controllers.Api { [Authorize(AuthenticationSchemes = "Bearer", Roles = RoleService.AdministratorRoleName)] [Route("api/[controller]")] [ApiController] public class ServersController : BaseApiController { private readonly IMapper Mapper; private readonly ServerService ServerService; private readonly ImportService ImportService; public ServersController( ILogger logger, IMapper mapper, ServerService serverService, ImportService importService) : base(logger) { Mapper = mapper; ServerService = serverService; ImportService = importService; } [HttpGet] public async Task>> GetAsync() { return Ok(Mapper.Map>(await ServerService.GetAsync())); } [HttpGet("{id}")] public async Task> Get(Guid id) { var server = await ServerService.GetAsync(id); if (server == null) return NotFound(); return Ok(Mapper.Map(server)); } [HttpPost("Import/{objectKey}")] public async Task ImportAsync(Guid objectKey) { try { var server = await ImportService.ImportFromUploadArchiveAsync(objectKey); return Ok(); } catch (Exception ex) { Logger?.LogError(ex, "Could not import server from upload"); return BadRequest(ex.Message); } } } }