feat(api): ApplicationInWorkValidator добававлена валидация настроек планировщика

This commit is contained in:
Mikhail Kuznetsov
2024-03-28 16:21:22 +10:00
parent 81123a5424
commit 2042db8d4b
3 changed files with 64 additions and 3 deletions

View File

@@ -8,18 +8,20 @@ namespace PARR.API.Validators
{
private readonly IApplicationsInWorkService applicationsInWorkService;
private readonly IWorkService workService;
private readonly IEsppSchTypeConfigService esppSchTypeConfigService;
public ApplicationInWorkValidator(
IApplicationsInWorkService applicationsInWorkService,
IWorkService workService
IWorkService workService,
IEsppSchTypeConfigService esppSchTypeConfigService
)
{
this.applicationsInWorkService = applicationsInWorkService;
this.workService = workService;
this.esppSchTypeConfigService = esppSchTypeConfigService;
RuleFor(t => t.TemplateDuration)
.NotNull().NotEmpty().WithMessage("Длительность данного задания на выполнение работ не может быть пустым")
.Matches("^\\d{1,2}\\s\\d{2}[:]\\d{2}[:]\\d{2}$")
.Matches("^\\d{1,2}\\s\\d{1,2}[:]\\d{1,2}[:]\\d{1,2}$")
.WithMessage("Длительность данного задания на выполнение работ должна соответствовать шаблону dd hh:mm:ss(7 00:00:00)");
RuleFor(t => t.ShortDescription)
@@ -38,8 +40,49 @@ namespace PARR.API.Validators
RuleFor(t => t.ApplicationId)
.MustAsync(async (entity, value, c) => await IsApplicationExist(entity))
.WithMessage("У данного задания на выполнение работ указан несуществующий Id программного обеспечения");
//Проверяем настройки планировщика
RuleFor(t => t.Schedule).NotNull().NotEmpty().WithMessage("Настройки планировщика задания на выполнение работ не могут быть пустыми");
RuleFor(t => t.Schedule.TypeScheduleId)
.NotNull().NotEmpty().WithMessage($"Тип планировщика задания на выполнение работ не может быть пустым")
.Must((entity, value, c) => IsTypeScheduleIdExist(entity))
.When(t => t.Schedule != null).WithMessage($"Не удалось найти указанный тип планировщика задания на выполнение работ");
RuleFor(t => t.Schedule.Values)
.NotNull().NotEmpty().WithMessage($"Настройки значений планировщика задания на выполнение работ не могут быть пустыми")
.Must((entity, value, c) => IsScheduleTypeValueIdExist(entity))
.When(t => t.Schedule != null && t.Schedule.TypeScheduleId > 0).WithMessage("Не удалось найти подходящую конфигруцию планировщика задания на выполнение работ");
}
private bool IsTypeScheduleIdExist(ApplicationInWorkRequest request)
{
var configs = esppSchTypeConfigService.GetWithSchIncludes().ToList();
var result = configs.Where(t => t.TypeScheduleId == request.Schedule.TypeScheduleId).FirstOrDefault() != null;
return result;
}
private bool IsScheduleTypeValueIdExist(ApplicationInWorkRequest request)
{
var configs = esppSchTypeConfigService.GetWithSchIncludes().ToList();
var mustValues = configs.Where(t => t.TypeScheduleId == request.Schedule.TypeScheduleId).ToList();
var values = request.Schedule.Values;
foreach (var mustValue in mustValues)
{
var mlValues = mustValue?.EsppSchType?.EsppSchTypeValues.Select(t => t.Id);
if (mlValues == null)
return false;
if (!mlValues.Intersect(values).Any())
return false;
}
return true;
}
private async Task<bool> IsWorkExist(ApplicationInWorkRequest request)
{