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), "Не передано значение фильтра.");
}
var report = await workloadService.GetTemplateReportAsync(reportType, filter.Trim(), state, date, offset.TimeZoneOffset, query.ResponseArea?.Trim(), query.WorkGroup?.Trim());
var response = mapper.Map>(report);
return Ok(new Response>(response, true));
}
}
}