feat(api): ApplicationInWorkValidator добававлена валидация настроек планировщика
This commit is contained in:
@@ -23,5 +23,21 @@
|
|||||||
public int? AgentTimeOutSec { get; set; }
|
public int? AgentTimeOutSec { get; set; }
|
||||||
|
|
||||||
public string? AgentScript { get; set; }
|
public string? AgentScript { get; set; }
|
||||||
|
|
||||||
|
public required ScheduleRequest Schedule { get; set; }
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public class ScheduleRequest
|
||||||
|
{
|
||||||
|
public DateTimeOffset NextRun { get; set; }
|
||||||
|
|
||||||
|
//public DateTimeOffset? LastRun { get; set; }
|
||||||
|
|
||||||
|
//public string Timezone { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
public required int TypeScheduleId { get; set; }
|
||||||
|
|
||||||
|
public List<Guid> Values { get; set; } = new List<Guid>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -82,6 +82,8 @@ namespace PARR.API.Controllers.V1
|
|||||||
AgentScript = request.AgentScript
|
AgentScript = request.AgentScript
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//TODO Schedule
|
||||||
|
|
||||||
if (!await applicationsInWorkService.CreateAsync(applicationInWork) || !await applicationsInWorkService.CommitAsync())
|
if (!await applicationsInWorkService.CreateAsync(applicationInWork) || !await applicationsInWorkService.CommitAsync())
|
||||||
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = "Ошибка при записи нового задания на выполнение работ в базу данных" } }));
|
return BadRequest(new Response(false, new List<ErrorModel> { new ErrorModel { Message = "Ошибка при записи нового задания на выполнение работ в базу данных" } }));
|
||||||
|
|
||||||
|
|||||||
@@ -8,18 +8,20 @@ namespace PARR.API.Validators
|
|||||||
{
|
{
|
||||||
private readonly IApplicationsInWorkService applicationsInWorkService;
|
private readonly IApplicationsInWorkService applicationsInWorkService;
|
||||||
private readonly IWorkService workService;
|
private readonly IWorkService workService;
|
||||||
|
private readonly IEsppSchTypeConfigService esppSchTypeConfigService;
|
||||||
|
|
||||||
public ApplicationInWorkValidator(
|
public ApplicationInWorkValidator(
|
||||||
IApplicationsInWorkService applicationsInWorkService,
|
IApplicationsInWorkService applicationsInWorkService,
|
||||||
IWorkService workService
|
IWorkService workService,
|
||||||
|
IEsppSchTypeConfigService esppSchTypeConfigService
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
this.applicationsInWorkService = applicationsInWorkService;
|
this.applicationsInWorkService = applicationsInWorkService;
|
||||||
this.workService = workService;
|
this.workService = workService;
|
||||||
|
this.esppSchTypeConfigService = esppSchTypeConfigService;
|
||||||
RuleFor(t => t.TemplateDuration)
|
RuleFor(t => t.TemplateDuration)
|
||||||
.NotNull().NotEmpty().WithMessage("Длительность данного задания на выполнение работ не может быть пустым")
|
.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)");
|
.WithMessage("Длительность данного задания на выполнение работ должна соответствовать шаблону dd hh:mm:ss(7 00:00:00)");
|
||||||
|
|
||||||
RuleFor(t => t.ShortDescription)
|
RuleFor(t => t.ShortDescription)
|
||||||
@@ -38,8 +40,49 @@ namespace PARR.API.Validators
|
|||||||
RuleFor(t => t.ApplicationId)
|
RuleFor(t => t.ApplicationId)
|
||||||
.MustAsync(async (entity, value, c) => await IsApplicationExist(entity))
|
.MustAsync(async (entity, value, c) => await IsApplicationExist(entity))
|
||||||
.WithMessage("У данного задания на выполнение работ указан несуществующий Id программного обеспечения");
|
.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)
|
private async Task<bool> IsWorkExist(ApplicationInWorkRequest request)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user