using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using MoonlightServers.Api.Infrastructure.Database; using MoonlightServers.Api.Infrastructure.Database.Entities; using MoonlightServers.Shared; using MoonlightServers.Shared.Admin.Nodes; namespace MoonlightServers.Api.Admin.Nodes; [ApiController] [Authorize(Policy = Permissions.Nodes.View)] [Route("api/admin/servers/nodes/{id:int}/statistics")] public class StatisticsController : Controller { private readonly NodeService NodeService; private readonly DatabaseRepository NodeRepository; public StatisticsController(NodeService nodeService, DatabaseRepository nodeRepository) { NodeService = nodeService; NodeRepository = nodeRepository; } [HttpGet] public async Task> GetAsync([FromRoute] int id) { var node = await NodeRepository .Query() .FirstOrDefaultAsync(x => x.Id == id); if (node == null) return Problem("No node with this id found", statusCode: 404); var statistics = await NodeService.GetStatisticsAsync(node); var dto = NodeMapper.ToDto(statistics); return dto; } }