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 System.Text.Json; namespace PARR.API.Controllers.V1 { [Authorize(Roles = ParrRoles.Administrator.Role)] public class GeneratorTemplateController : BaseApiController { private readonly IValidator validator; private readonly IMqService mqService; private readonly IUriService uriService; private readonly MqSettings mqSettings; private readonly IClientService clientService; public GeneratorTemplateController( IValidator validator, IMqService mqService, IUriService uriService, MqSettings mqSettings, IClientService clientService ) { this.validator = validator; this.mqService = mqService; this.uriService = uriService; this.mqSettings = mqSettings; this.clientService = clientService; } /// !!!!!!!!!! Это старый контроллер, удалить !!!!!!!!!! /// /// Запрос на генерацию шаблонов /// /// [HttpPost(ApiRoutes.GeneratorTemplate.Create)] public async Task Create([FromBody] GeneratorTemplateRequest request) { var resultValidate = await validator.ValidateAsync(request); if (!resultValidate.IsValid) return BadRequest(new Response(resultValidate.Errors)); var result = true; request.Ek.ForEach(ek => { //todo: проверить в ForEach(async status - отрабатывает ли нормально async, возможно надо переделать в обычный foreach request.Status.ForEach(async status => { var obj = new GeneratorTemplateMq { Action = request.Action, ApplicationId = request.ApplicationId, Ek = ek, WorkId = request.WorkId, StatusEk = status, IsActiveTemplate = request.IsActiveTemplate, IsActiveSchedule = request.IsActiveSchedule, HistoryInitiator = new HistoryInitiator { InitiatorIp = clientService.GetClientIp()?.ToString(), InitiatorParrComponentId = ParrComponentsEnum.Api } }; var msg = JsonSerializer.Serialize(obj); var _result = await mqService.SendAsync(mqSettings.GenerateTemplates, new[] { msg }); if (_result.IsSuccess == false) result = false; }); }); //var obj = new GeneratorTemplateMq //{ // Action = request.Action, // ApplicationId = request.ApplicationId, // Ek = request.Ek, // WorkId = request.WorkId, // StatusEk = request.Status, // IsActiveTemplate = request.IsActiveTemplate, // IsActiveSchedule = request.IsActiveSchedule //}; //var msg = JsonSerializer.Serialize(obj); //var result = mqService.Send(mqSettings.GenerateTemplates, new[] { msg }); //if (!result.IsSuccess) if (!result) 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(), "Отправлен запрос на генерацию шаблонов.")); } } }