63 lines
2.0 KiB
C#
63 lines
2.0 KiB
C#
using Microsoft.EntityFrameworkCore;
|
||
using PARR.DAL.Services.Interfaces.Job;
|
||
using PARR.DAL.Services.Interfaces.Unit;
|
||
|
||
namespace PARR.TemplateGeneratorWorker.Services
|
||
{
|
||
internal class ValidatorService : IValidatorService
|
||
{
|
||
private readonly IServiceProvider serviceProvider;
|
||
private readonly ILogger<ValidatorService> logger;
|
||
|
||
public ValidatorService(
|
||
IServiceProvider serviceProvider,
|
||
ILogger<ValidatorService> logger
|
||
)
|
||
{
|
||
this.serviceProvider = serviceProvider;
|
||
this.logger = logger;
|
||
}
|
||
|
||
|
||
public async Task<bool> IsValidAsync(Guid jobId, Guid unitId)
|
||
{
|
||
using (var scope = serviceProvider.CreateScope())
|
||
{
|
||
var jobService = GetServiceInScope<IJobService>(scope);
|
||
var job = await jobService
|
||
.Get().AsNoTracking()
|
||
.FirstOrDefaultAsync(t => t.Id == jobId);
|
||
|
||
if (job == null)
|
||
{
|
||
logger.LogError($"Не найдена регалментная работа {nameof(jobId)}: {jobId}");
|
||
return false;
|
||
}
|
||
|
||
var unitService = GetServiceInScope<IUnitService>(scope);
|
||
var unit = await unitService
|
||
.Get().AsNoTracking()
|
||
.FirstOrDefaultAsync(t => t.Id == unitId);
|
||
|
||
if (unit == null)
|
||
{
|
||
logger.LogError($"Не найден элемент конфигурации {nameof(unitId)}: {unitId}");
|
||
return false;
|
||
}
|
||
|
||
return true;
|
||
}
|
||
}
|
||
|
||
|
||
private Service GetServiceInScope<Service>(IServiceScope scope)
|
||
{
|
||
var service = scope.ServiceProvider.GetService<Service>();
|
||
if (service == null)
|
||
throw new Exception($"Не найден сервис: {nameof(Service)}");
|
||
|
||
return service;
|
||
}
|
||
}
|
||
}
|