using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using PARR.API.Contracts.V1; using PARR.API.Contracts.V1.Responses.Base; using PARR.API.Controllers.V1.Base; using PARR.API.Services.Interfaces; using PARR.API.Settings; using PARR.Core.Services.Task.Interfaces; using PARR.Domain.Common.Roles; using PARR.Domain.Entities.Base.History; using PARR.Domain.Enums; namespace PARR.API.Controllers.V1.Statistics { /// /// Статистика загруженности по ЗО, РГ /// [Authorize(Roles = ParrRoles.EsppRobot.RoleOrAdmin)] public class StatWorkloadController : BaseApiController { private readonly ITaskManagementService taskManagementService; private readonly IClientService clientService; private readonly MqSettings mqSettings; private readonly ILogger logger; public StatWorkloadController( ITaskManagementService taskManagementService, IClientService clientService, MqSettings mqSettings, ILogger logger ) { this.taskManagementService = taskManagementService; this.clientService = clientService; this.mqSettings = mqSettings; this.logger = logger; } /// /// Сформировать отчетность /// /// [HttpPost(ApiRoutes.Workload.Build)] public async Task Build() { var initiator = new HistoryInitiator { InitiatorIp = clientService.GetClientIp()?.ToString(), InitiatorParrComponentId = ParrComponentsEnum.Api, InitiatorComment = "Отправлен запрос из API на формирование отчета о загруженности" }; try { mqSettings.Tasks.TryGetValue(TaskTypeEnum.Workload, out var queueSettings); if (queueSettings == null) { logger.LogError("Не удалось получить настройки очереди для TaskType: {TaskType}", TaskTypeEnum.Workload); throw new InvalidOperationException($"Не удалось получить настройки очереди для TaskTypeEnum.Workload"); } var taskId = await taskManagementService.CreateTaskAsync(TaskTypeEnum.Workload, default, initiator, queueSettings); return Ok(new Response(null, true, null!, $"Создана задача {taskId} на формирование отчета")); } catch (Exception ex) { return BadRequest(new Response(false, new List { new ErrorModel { Message = ex.Message } })); } } } }