using FluentValidation; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using PARR.API.Contracts.V1; using PARR.API.Contracts.V1.Requests; using PARR.API.Contracts.V1.Responses.Base; using PARR.API.Controllers.V1.Base; using PARR.API.Services.Interfaces; using PARR.API.Settings; using PARR.BLL.Domain.Mq; using PARR.BLL.Services.Interfaces; using PARR.Common.Domain; using PARR.Constants; using PARR.DAL.Services.Interfaces.Job; using System.Text.Json; namespace PARR.API.Controllers.V1 { /// /// Отправка запросов на активацию/деактивацию шаблонов/расписаний /// [Authorize(Roles = ParrRoles.Administrator.Role)] public class TemplateActivatorController : BaseApiController { private readonly IValidator validator; private readonly IMqService mqService; private readonly IUriService uriService; private readonly MqSettings mqSettings; private readonly IJobService jobService; private readonly IClientService clientService; public TemplateActivatorController( IValidator validator, IMqService mqService, IUriService uriService, MqSettings mqSettings, IJobService jobService, IClientService clientService ) { this.validator = validator; this.mqService = mqService; this.uriService = uriService; this.mqSettings = mqSettings; this.jobService = jobService; this.clientService = clientService; } /// /// Отправить запрос на активацию/деактивацию шаблонов/расписаний /// /// [HttpPost(ApiRoutes.TemplateActivator.SendRequest)] public async Task SendRequest([FromBody] TemplateActivatorRequest request) { var resultValidate = await validator.ValidateAsync(request); if (!resultValidate.IsValid) return BadRequest(new Response(resultValidate.Errors)); var mqRequest = new TemplateActivatorMq { Id = request.Id, EntityType = request.EntityType, EsppObject = request.EsppObject, NewState = request.NewState, HistoryInitiator = new HistoryInitiator { InitiatorIp = clientService.GetClientIp()?.ToString(), InitiatorParrComponentId = ParrComponentsEnum.Api } }; var msg = JsonSerializer.Serialize(mqRequest); var sendResult = await mqService.SendAsync(mqSettings.TemplateActivator, new[] { msg }); if (!sendResult.IsSuccess) return BadRequest(new Response(false, new List { new ErrorModel { Message = $"Ошибка при отправке данных." } })); var createdUri = uriService.GetAllUri(ApiRoutes.Template.GetAll); return Created(createdUri, new Response(null, true, new List(), "Отправлен запрос активатору шаблонов/расписаний.")); } } }