using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using PARR.API.Contracts.V1; using PARR.API.Contracts.V1.Responses.Base; using PARR.API.Contracts.V1.Responses.Statistics; using PARR.API.Controllers.V1.Base; using PARR.Constants; using PARR.DAL.Services.Interfaces; namespace PARR.API.Controllers.V1.Statistics { /// /// Статистика по хостам /// [Authorize(Roles = ParrRoles.Administrator.Role)] public class StatHostController : BaseApiController { private readonly IHostService hostService; public StatHostController(IHostService hostService) { this.hostService = hostService; } /// /// Статистика синхронизации хостов с АИХИТ за последние сутки /// /// [HttpGet(ApiRoutes.StatHost.Get)] public async Task Get() { var queryDate = DateTimeOffset.UtcNow.AddDays(-1); var response = new StatHostResponse { AllHosts = await hostService.Get().CountAsync(), CreatedLastDay = await hostService.Get().CountAsync(t => t.DateCreated >= queryDate), UpdatedLastDay = await hostService.Get().CountAsync(t => t.DateModified.HasValue && t.DateModified.Value >= queryDate) }; return Ok(new Response(response, true)); } /// /// Количество хостов в шаблонах /// /// [HttpGet(ApiRoutes.StatHost.GetWithTemplates)] public async Task GetWithTemplates() { //считаем именно хосты в шаблонах, т е один хост может быть в нескольких шаблонах var response = new StatHostTemplateResponse { AllHosts = await hostService.Get().CountAsync(), HostsInTemplates = await hostService.Get().Include(t => t.Templates).CountAsync(t =>t.Templates.Any()) }; return Ok(new Response(response, true)); } } }