using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Npgsql.EntityFrameworkCore.PostgreSQL.Query.Expressions.Internal; using PARR.API.Contracts.V1; using PARR.API.Contracts.V1.Requests.BaseRequests; using PARR.API.Contracts.V1.Responses.Base; using PARR.API.Contracts.V1.Responses.Statistics; using PARR.API.Controllers.V1.Base; using PARR.BLL.Services.Interfaces; using PARR.Constants; using PARR.DAL.Contracts; using PARR.DAL.Services.Interfaces; namespace PARR.API.Controllers.V1.Statistics { /// /// Статистика по шаблонам /// [Authorize(Roles = ParrRoles.Administrator.Role)] public class StatTemplateController : BaseApiController { private readonly ITemplateService templateService; private readonly ICalendarService calendarService; public StatTemplateController( ITemplateService templateService, ICalendarService calendarService ) { this.templateService = templateService; this.calendarService = calendarService; } ///// ///// Статистика по шаблонам ///// ///// //[HttpGet(ApiRoutes.StatTemplate.Get)] //public async Task Get() //{ // var response = new StatTemplateResponse // { // ActivateScheduleCount = await templateService.Get().CountAsync(t => t.IsActiveSchedule), // ActivateTemplateCount = await templateService.Get().CountAsync(t => t.IsActiveTemplate), // TemplateAgentCount = await templateService.Get().Include(t => t.ApplicationsInWork).CountAsync(t => t.ApplicationsInWork!.IsAgent), // TemplateCount = await templateService.Get().CountAsync(), // SyncEsppScheduleCount = await templateService.Get().Include(t => t.RobotConfigurations).CountAsync(t => t.RobotConfigurations.Any(c => c.RobotCode == (int)RobotsEnum.ScheduleOrder && c.TaskStatusCode == (int)TaskStatusEnum.Ok)), // SyncEsppTemplatesCount = await templateService.Get().Include(t => t.RobotConfigurations).CountAsync(t => t.RobotConfigurations.Any(c => c.RobotCode == (int)RobotsEnum.TemplateOrder && c.TaskStatusCode == (int)TaskStatusEnum.Ok)) // }; // return Ok(new Response(response, true)); //} ///// ///// Получить статистику созданных шаблонов (расписаний) в БД ПАРР ///// ///// ///// ///// //[HttpGet(ApiRoutes.StatTemplate.GetForPeriod)] //public async Task GetForPeriod([FromQuery] TimeZoneOffsetClient timeZoneQuery, [FromQuery] int startPeriodDays = 3) //{ // var endPeriod = calendarService.GetDateWithTimeZoneOffset(DateTimeOffset.UtcNow, timeZoneQuery.TimeZoneOffsetHours); // var startPeriod = endPeriod.AddDays(-startPeriodDays); // var query = templateService.Get() // .Where(t => // t.DateCreated.DateTime.AddHours(timeZoneQuery.TimeZoneOffsetHours).Date >= startPeriod.Date // && t.DateCreated.DateTime.AddHours(timeZoneQuery.TimeZoneOffsetHours).Date <= endPeriod.Date // ).GroupBy(t => t.DateCreated.AddHours(timeZoneQuery.TimeZoneOffsetHours).Date) // .Select(t => new // { // Date = t.Key, // CreatedObjs = t.Count() // }); // var result = await query.ToListAsync(); // var daysList = calendarService.GetDatesForPeriod(startPeriod, endPeriod); // var response = new List(); // daysList.ForEach(date => response.Add(new StatTemplatePeriodResponse // { // Date = date, // CreatedTemplatesCount = result.FirstOrDefault(t => DateOnly.FromDateTime(t.Date) == date)?.CreatedObjs ?? 0 // })); // response = response.OrderBy(t => t.Date).ToList(); // return Ok(new Response>(response, true)); //} } }