using AutoMapper; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using PARR.API.Contracts.V1; using PARR.API.Contracts.V1.Requests; 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.API.Services.Interfaces; using PARR.Core.Services.RobotSnapshotServices; using PARR.Domain.Common.Roles; using PARR.Domain.DTOs.RobotSnapshotDTO; namespace PARR.API.Controllers.V1.Statistics { [Authorize] public class StatRobotSnapshotController : BaseApiController { private readonly IRobotSnapshotService robotSnapshotService; private readonly IMapper mapper; private readonly IClientService clientService; public StatRobotSnapshotController( IRobotSnapshotService robotSnapshotService, IMapper mapper, IClientService clientService ) { this.robotSnapshotService = robotSnapshotService; this.mapper = mapper; this.clientService = clientService; } /// /// Получить снапшоты роботов. /// /// [Authorize(Roles = ParrRoles.Administrator.Role)] [HttpGet(ApiRoutes.StatRobotSnapshot.GetAll)] public async Task GetAll([FromQuery] StatRobotSnapshotQuery query) { var queryDto = mapper.Map(query); var snapshots = await robotSnapshotService.GetAsync(queryDto); if (snapshots.Count == 0) return NoContent(); var response = mapper.Map>(snapshots); return Ok(new Response>(response, true)); } /// /// Отправить снапшот роботов. /// Доступ только с ролью "Робот ЕСПП" /// /// /// [Authorize(Roles = ParrRoles.EsppRobot.Role)] [HttpPost(ApiRoutes.StatRobotSnapshot.Create)] public async Task Create([FromBody] StatRobotSnapshotCreateRequest request) { var obj = new CreateRobotSnapshot(request.TemplateRobotsCount, request.ScheduleRobotsCount, request.MaxRobots, clientService.GetClientIp()?.ToString() ?? ""); var snapshot = await robotSnapshotService.CreateAsync(obj); return Created("", new Response(mapper.Map(snapshot), true)); } } }