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)); } } }