using FluentValidation; using PARR.API.Contracts.V1.Requests; using PARR.DAL.Services.Interfaces; namespace PARR.API.Validators { public class SubprocessValidator : AbstractValidator { private readonly IProcessService processService; private bool? isValid = null; public SubprocessValidator( IProcessService processService ) { this.processService = processService; RuleFor(t => t.Name).NotEmpty().NotNull().WithMessage("Имя подпроцесса не может быть пустым"); RuleFor(t => t.EsppId).NotEmpty().NotNull().WithMessage("EsppId не может быть пустым"); RuleFor(t => t.ProcessId).NotEmpty().NotNull().WithMessage("Подпроцесс должна быть связан с процессом. ProcessId не может быть пустым"); RuleFor(t => t.ProcessId) .MustAsync(async (entity, value, c) => await IsProcessExist(entity)) .WithMessage("У данного подпроцесса указан несуществующий Id процесса"); } private async Task IsProcessExist(SubprocessRequest request) { //чтобы не делать 2 раза валидацию if (isValid.HasValue) return isValid.Value; isValid = await processService.GetAsync(request.ProcessId) != null; return isValid.Value; } } }