diff --git a/PARR.API/Contracts/V1/ApiRoutes.cs b/PARR.API/Contracts/V1/ApiRoutes.cs
index 4af58ae9..c0fec12e 100644
--- a/PARR.API/Contracts/V1/ApiRoutes.cs
+++ b/PARR.API/Contracts/V1/ApiRoutes.cs
@@ -325,6 +325,18 @@
public const string getParam = "{id}";
}
+
+
+ ///
+ /// Активатор/деактиватор шаблонов/расписаний
+ ///
+ public static class TemplateActivator
+ {
+ public const string SendRequest = Base + "/jobs/" + appInWorkId + "/template-activator";
+
+ public const string appInWorkId = "{applicationInWorkId}";
+ }
+
#endregion
public static class Application
diff --git a/PARR.API/Contracts/V1/Requests/TemplateActivatorRequest.cs b/PARR.API/Contracts/V1/Requests/TemplateActivatorRequest.cs
new file mode 100644
index 00000000..f2e5ad87
--- /dev/null
+++ b/PARR.API/Contracts/V1/Requests/TemplateActivatorRequest.cs
@@ -0,0 +1,12 @@
+using PARR.Constants;
+
+namespace PARR.API.Contracts.V1.Requests
+{
+ public class TemplateActivatorRequest
+ {
+ ///
+ /// Действие по активации/деактивации
+ ///
+ public TemplateActivatorActionsEnum Action { get; set; }
+ }
+}
diff --git a/PARR.API/Controllers/V1/TemplateActivatorController.cs b/PARR.API/Controllers/V1/TemplateActivatorController.cs
new file mode 100644
index 00000000..afa5feb7
--- /dev/null
+++ b/PARR.API/Controllers/V1/TemplateActivatorController.cs
@@ -0,0 +1,82 @@
+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.Constants;
+using PARR.DAL.Services.Interfaces;
+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 IApplicationsInWorkService applicationsInWorkService;
+
+ public TemplateActivatorController(
+ IValidator validator,
+ IMqService mqService,
+ IUriService uriService,
+ MqSettings mqSettings,
+ IApplicationsInWorkService applicationsInWorkService
+ )
+ {
+ this.validator = validator;
+ this.mqService = mqService;
+ this.uriService = uriService;
+ this.mqSettings = mqSettings;
+ this.applicationsInWorkService = applicationsInWorkService;
+ }
+
+
+ ///
+ /// Отправить запрос на активацию/деактивацию шаблонов/расписаний
+ ///
+ ///
+ ///
+ [HttpPost(ApiRoutes.TemplateActivator.SendRequest)]
+ public async Task SendRequest([FromRoute] Guid applicationInWorkId, [FromBody] TemplateActivatorRequest request)
+ {
+ var resultValidate = await validator.ValidateAsync(request);
+ if (!resultValidate.IsValid)
+ return BadRequest(new Response(resultValidate.Errors));
+
+ var appInWork = await applicationsInWorkService.GetAsync(applicationInWorkId);
+
+ if (appInWork == null)
+ return BadRequest(new Response(false, new List { new ErrorModel { FieldName = nameof(applicationInWorkId), Message = "Некорректное значение" } }));
+
+
+ var mqRequest = new TemplateActivatorMq
+ {
+ ApplicationInWorkId = applicationInWorkId,
+ Action = request.Action
+ };
+
+ var msg = JsonSerializer.Serialize(mqRequest);
+
+ var sendResult = mqService.Send(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(), "Отправлен запрос активатору шаблонов/расписаний."));
+ }
+ }
+}
diff --git a/PARR.API/Settings/MqSettings.cs b/PARR.API/Settings/MqSettings.cs
index 7989cb5c..228178cb 100644
--- a/PARR.API/Settings/MqSettings.cs
+++ b/PARR.API/Settings/MqSettings.cs
@@ -6,6 +6,7 @@ namespace PARR.API.Settings
{
public MqGenerateTemplates GenerateTemplates { get; set; } = new MqGenerateTemplates();
public MqTemplateDistributor TemplateDistributor { get; set; } = new MqTemplateDistributor();
+ public MqTemplateActivator TemplateActivator { get; set; } = new MqTemplateActivator();
public MqStatistics Statistics { get; set; } = new MqStatistics();
}
@@ -25,6 +26,14 @@ namespace PARR.API.Settings
public string Password { get; set; } = string.Empty;
}
+ public class MqTemplateActivator : IMqSettings
+ {
+ public string HostName { get; set; } = string.Empty;
+ public string QueueName { get; set; } = string.Empty;
+ public string User { get; set; } = string.Empty;
+ public string Password { get; set; } = string.Empty;
+ }
+
public class MqStatistics
{
public StatMqAuth StatMqAuth { get; set; } = new StatMqAuth();
diff --git a/PARR.API/Validators/TemplateActivatorRequestValidator.cs b/PARR.API/Validators/TemplateActivatorRequestValidator.cs
new file mode 100644
index 00000000..539e10d8
--- /dev/null
+++ b/PARR.API/Validators/TemplateActivatorRequestValidator.cs
@@ -0,0 +1,16 @@
+using FluentValidation;
+using PARR.API.Contracts.V1.Requests;
+using PARR.Constants;
+
+namespace PARR.API.Validators
+{
+ public class TemplateActivatorRequestValidator : AbstractValidator
+ {
+ public TemplateActivatorRequestValidator()
+ {
+ RuleFor(t => t.Action).Must(action =>
+ Enum.IsDefined(typeof(TemplateActivatorActionsEnum), action)
+ ).WithMessage("Некорректное значение action");
+ }
+ }
+}
diff --git a/PARR.API/appsettings.Development.json b/PARR.API/appsettings.Development.json
index b1f1d5d6..ba21738f 100644
--- a/PARR.API/appsettings.Development.json
+++ b/PARR.API/appsettings.Development.json
@@ -27,6 +27,9 @@
"TemplateDistributor": {
"HostName": "10.99.253.216"
},
+ "TemplateActivator": {
+ "HostName": "10.99.253.216"
+ },
"Statistics": {
"StatMqAuth": {
"HostName": "10.99.253.216"
diff --git a/PARR.API/appsettings.json b/PARR.API/appsettings.json
index b940116a..bee17318 100644
--- a/PARR.API/appsettings.json
+++ b/PARR.API/appsettings.json
@@ -51,6 +51,12 @@
"User": "template_distributor_writer",
"Password": "KGgsdfu%%44qqwew"
},
+ "TemplateActivator": {
+ "HostName": "parr-rabbitmq",
+ "QueueName": "parr-template-activator",
+ "User": "template_activator_writer",
+ "Password": "Gfkjhsdg*%fsdf"
+ },
"Statistics": {
"StatMqAuth": {
"HostName": "parr-rabbitmq",
diff --git a/PARR.Constants/TemplateActivatorActionsEnum.cs b/PARR.Constants/TemplateActivatorActionsEnum.cs
index 0f5c070c..661577dd 100644
--- a/PARR.Constants/TemplateActivatorActionsEnum.cs
+++ b/PARR.Constants/TemplateActivatorActionsEnum.cs
@@ -8,42 +8,42 @@
///
/// Активировать все шаблоны
///
- ActivateAllTemplates,
+ ActivateAllTemplates = 0,
///
/// Активировать шаблоны у которых активировано расписание
///
- ActivateTemplatesWithActiveSchedules,
-
+ ActivateTemplatesWithActiveSchedules = 1,
+
///
/// Деактивировать все шаблоны
///
- DeactivateAllTemplates,
+ DeactivateAllTemplates = 2,
///
/// Деактивировать шаблоны у которынх деактивировано расписание
///
- DeactivateTemplatesWithDeactivationSchedules,
+ DeactivateTemplatesWithDeactivationSchedules = 3,
///
/// Активировать все расписания
///
- ActivateAllSchedules,
+ ActivateAllSchedules = 4,
///
/// Деактивировать все расписания
///
- DeactivateAllSchedules,
+ DeactivateAllSchedules = 5,
///
/// Активировать все расписания у которых активированы шаблоны
///
- ActivateSchedulesWithActiveTemplates,
+ ActivateSchedulesWithActiveTemplates = 6,
///
/// Деактивировать все расписания у которых деактивированы шаблоны
///
- DeactivateSchedulesWithDeactivationTemplates
+ DeactivateSchedulesWithDeactivationTemplates = 7