using FluentValidation; using PARR.API.Contracts.V1.Requests; using PARR.BLL.Contracts; using PARR.DAL.Services.Interfaces; namespace PARR.API.Validators { public class GeneratorTemplateRequestValidator : AbstractValidator { private readonly IApplicationsInWorkService applicationsInWorkService; private bool? isValid = null; public GeneratorTemplateRequestValidator(IApplicationsInWorkService applicationsInWorkService) { this.applicationsInWorkService = applicationsInWorkService; RuleFor(t => t.WorkId) .MustAsync(async (entity, value, c) => await IsApplicationContainWork(entity, entity.ApplicationId)) .WithMessage("У данной работы нет связанных приложений"); RuleFor(t => t.ApplicationId) .MustAsync(async (entity, value, c) => await IsApplicationContainWork(entity, value)) .WithMessage("У данного приложения нет связанных работ"); //TODO: возможно сделать проверку, по данному выражению есть ли ЭК RuleFor(t => t.Ek).NotEmpty().WithMessage("Недопустимое значение ЭК. Возможные значения: *, ВРТ-*-ДВС"); RuleFor(t => t.Action) .Must(t => t.ToLower() == GenerateTemplateActionsEnum.create.ToString() || t.ToLower() == GenerateTemplateActionsEnum.deactivate.ToString()) .WithMessage($"Допустимые значения: {GenerateTemplateActionsEnum.create}, {GenerateTemplateActionsEnum.deactivate}"); //0 - все статусы, 1,2,3,4,5,6,7,9 var ekStatuses = new List { 0, 1, 2, 3, 4, 5, 6, 7, 9 }; RuleFor(t => t.Status).Must(t => ekStatuses.Contains(t)).WithMessage("Допустимые значения: 0 - все статусы, 1,2,3,4,5,6,7,9"); } private async Task IsApplicationContainWork(GeneratorTemplateRequest request, Guid applicationId) { //чтобы не делать 2 раза валидацию if (isValid.HasValue) return isValid.Value; isValid = await applicationsInWorkService.GetAsync(applicationId, request.WorkId) != null; return isValid.Value; } } }