using AutoMapper; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using PARR.API.Contracts.V1; using PARR.API.Contracts.V1.Requests.BaseRequests; using PARR.API.Contracts.V1.Requests.Queries; using PARR.API.Contracts.V1.Responses.Base; using PARR.API.Contracts.V1.Responses.Statistics; using PARR.API.Controllers.V1.Base; using PARR.Core.Services.Workload.Interfaces; using PARR.Domain.Common.Roles; using PARR.Domain.Enums.Workload; namespace PARR.API.Controllers.V1.Statistics { /// /// Статситика загруженности - шаблоны /// [Authorize(Roles = ParrRoles.EsppRobot.RoleOrAdmin)] public class StatWorkloadTemplateController : BaseApiController { private readonly IMapper mapper; private readonly IWorkloadService workloadService; private readonly ILogger logger; public StatWorkloadTemplateController( IMapper mapper, IWorkloadService workloadService, ILogger logger ) { this.mapper = mapper; this.workloadService = workloadService; this.logger = logger; } /// /// Отчет о загруженности. Шаблоны /// /// /// /// /// /// /// /// [HttpGet(ApiRoutes.StatWorkloadTemplate.GetWorkloadTemplateReport)] public async Task GetWorkloadTemplateReport( [FromRoute] WorkloadTemplateReportType reportType, [FromRoute] string filter, [FromRoute] WorkloadTemplateReportState state, [FromRoute] DateOnly date, [FromQuery] TimeZoneOffsetClient offset, [FromQuery] StatWorkloadTemplateReqportQuery query ) { if (string.IsNullOrWhiteSpace(filter)) { logger.LogWarning("Не передано значение фильтра"); throw new ArgumentException(nameof(filter), "Не передано значение фильтра."); } if (query.JobSubfilterType.HasValue && string.IsNullOrWhiteSpace(query.JobSubfilterValue)) { logger.LogWarning("Не передано значение дополнительного фильтра для работы"); throw new ArgumentException(nameof(filter), "Не передано значение дополнительного фильтра для работы."); } var report = await workloadService.GetTemplateReportAsync(reportType, filter, state, date, offset.TimeZoneOffset, query.JobSubfilterType, query.JobSubfilterValue); var response = mapper.Map>(report); return Ok(new Response>(response, true)); } } }