using AutoMapper;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using PARR.API.Contracts.V1;
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.RobotMetrics;
using PARR.Domain.Common.Roles;
using PARR.Domain.DTOs.RobotMetrics;
using PARR.Domain.Enums;
namespace PARR.API.Controllers.V1.Statistics
{
///
/// Метрики заданий роботам
///
[Authorize(Roles = ParrRoles.Administrator.Role)]
public class StatRobotMetricsController : BaseApiController
{
private readonly IMapper _mapper;
private readonly IRobotMetricsService _robotMetricsService;
public StatRobotMetricsController(
IMapper mapper,
IRobotMetricsService robotMetricsService
)
{
_mapper = mapper;
_robotMetricsService = robotMetricsService;
}
///
/// Статистика по Заданиям Роботу, график
///
///
[HttpGet(ApiRoutes.StatRobotMetrics.GetRobotStatusMetrics)]
public async Task GetRobotStatusMetrics([FromRoute] RobotsEnum robotCode, [FromRoute] ChartPeriod period, CancellationToken cancellationToken)
{
var data = await _robotMetricsService.GetRobotStatusMetricsAsync(robotCode, period, cancellationToken);
var response = _mapper.Map>(data);
return Ok(new Response>(response, true));
}
///
/// Статистика по Статусам Заданий, график
///
///
[HttpGet(ApiRoutes.StatRobotMetrics.GetTaskStatusMetrics)]
public async Task GetTaskStatusMetrics([FromRoute] RobotsEnum robotCode, [FromRoute] ChartPeriod period, CancellationToken cancellationToken)
{
var data = await _robotMetricsService.GetTaskStatusMetricsAsync(robotCode, period, cancellationToken);
var response = _mapper.Map>(data);
return Ok(new Response>(response, true));
}
///
/// Статистика по статусам заданий, гибкий фильтр
///
///
[HttpGet(ApiRoutes.StatRobotMetrics.GetFilteredMetrics)]
public async Task GetFilteredMetrics([FromQuery] RobotFilteredMetricsQuery request, CancellationToken cancellationToken)
{
// ------- Правильность расчетов этого метода доконца не проверена -------
var filter = _mapper.Map(request);
var data = await _robotMetricsService.GetFilteredMetricsAsync(filter, cancellationToken);
var response = _mapper.Map>(data);
return Ok(new Response>(response, true));
}
}
}