Files
parr_api/PARR.GeneratorTemplates/GeneratorTemplate.cs
2023-09-25 13:45:11 +10:00

116 lines
4.5 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using PARR.BLL.Contracts;
using PARR.BLL.Domain.Mq;
using PARR.BLL.Services.Interfaces;
using PARR.DAL.Models;
using PARR.GeneratorTemplates.Services;
using PARR.GeneratorTemplates.Settings;
namespace PARR.GeneratorTemplates
{
internal class GeneratorTemplate : IGeneratorTemplate
{
private readonly MqSettings mqSettings;
private readonly IMqService mqService;
private readonly ILogger<GeneratorTemplate> logger;
private readonly ITransformService transformService;
private readonly IValidatorService validatorService;
private readonly IServiceProvider serviceProvider;
public GeneratorTemplate(
MqSettings mqSettings,
IMqService mqService,
ILogger<GeneratorTemplate> logger,
ITransformService transformService,
IValidatorService validatorService,
IServiceProvider serviceProvider
)
{
this.mqSettings = mqSettings;
this.mqService = mqService;
this.logger = logger;
this.transformService = transformService;
this.validatorService = validatorService;
this.serviceProvider = serviceProvider;
}
//TODO: метод не async, удалить позже асинк в worker
public async Task Start()
{
//mqService.Received += async (msg) =>
//{
// logger.LogInformation($"Привет откуда надо!!! ${msg}");
// //todo: идем дальеш!
//string msg = "{\"WorkId\":\"91219bec-e5f7-4a1a-b4c9-c135035d2498\",\"ApplicationId\":\"13044a1f-fa0c-476f-b501-2b8d06bac9f8\",\"Action\":\"create\",\"Ek\":\"вРТ-*RZD\"}";
string msg = "{\"WorkId\":\"91219bec-e5f7-4a1a-b4c9-c135035d2498\",\"ApplicationId\":\"13044a1f-fa0c-476f-b501-2b8d06bac9f8\",\"Action\":\"create\",\"Ek\":\"*ДВС\"}";
//string msg = "{\"WorkId\":\"91219bec-e5f7-4a1a-b4c9-c135035d2498\",\"ApplicationId\":\"13044a1f-fa0c-476f-b501-2b8d06bac9f8\",\"Action\":\"deactivate\",\"Ek\":\"*\"}";
await GenerateTemplates(msg);
// // проверить как ту дела с асинком
// // логгер работает в разных потоках все таки или нет?
//};
//var isConnected = mqService.InitConsumer(mqSettings);
//if (!isConnected)
// throw new Exception("Ошибка при подключении к RabbitMq");
}
public void Stop()
{
mqService.Dispose();
}
private async Task GenerateTemplates(string msg)
{
logger.LogInformation($"Получили запрос: {msg}");
var query = transformService.GetModelFromJson<GeneratorTemplateMq>(msg);
if (query == null)
return;
if (!await validatorService.IsValidApplicationAndWorksAsync(query.ApplicationId, query.WorkId))
{
logger.LogError($"Невалидны параметры {nameof(query.ApplicationId)}: {query.ApplicationId}, " +
$"{nameof(query.WorkId)}: {query.WorkId}," +
$" нет таких значений или они не связаны в таблице ${nameof(ApplicationsInWork)}");
return;
}
Enum.TryParse(typeof(GenerateTemplateActionsEnum), query.Action, true, out var action);
using (var scope = serviceProvider.CreateScope())
{
var templateManager = scope.ServiceProvider.GetService<ITemplateManager>();
if (templateManager == null)
throw new Exception($"Не найден сервис: {nameof(ITemplateManager)}");
switch (action)
{
case GenerateTemplateActionsEnum.create:
await templateManager.CreateTemplates(query);
break;
case GenerateTemplateActionsEnum.deactivate:
await templateManager.DeactivateTemplates(query);
break;
default:
logger.LogError($"Во входящем запросе, поле {nameof(query.Action)} не содержит допустимых значений");
return;
}
}
}
}
}