43 lines
1.4 KiB
C#
43 lines
1.4 KiB
C#
using FluentValidation;
|
||
using PARR.API.Contracts.V1.Requests;
|
||
using PARR.DAL.Services.Interfaces;
|
||
|
||
namespace PARR.API.Validators
|
||
{
|
||
public class WorkRequestValidator : AbstractValidator<WorkRequest>
|
||
{
|
||
private readonly ITnkService tnkService;
|
||
|
||
private bool? isValid = null;
|
||
|
||
public WorkRequestValidator(
|
||
ITnkService tnkService
|
||
)
|
||
{
|
||
this.tnkService = tnkService;
|
||
|
||
RuleFor(t => t.Name).NotEmpty().NotNull().WithMessage("Имя работ не может быть пустым");
|
||
|
||
RuleFor(t => t.EsppId).NotEmpty().NotNull().WithMessage("EsppId не может быть пустым");
|
||
|
||
RuleFor(t => t.TnkId).NotEmpty().NotNull().WithMessage("Работа должна быть связана с ТНК. TnkId не может быть пустым");
|
||
|
||
RuleFor(t => t.TnkId)
|
||
.MustAsync(async (entity, value, c) => await IsTnkExist(entity))
|
||
.WithMessage("У данной работы указан не существующий Id ТНК");
|
||
}
|
||
|
||
private async Task<bool> IsTnkExist(WorkRequest request)
|
||
{
|
||
//чтобы не делать 2 раза валидацию
|
||
if (isValid.HasValue)
|
||
return isValid.Value;
|
||
|
||
isValid = await tnkService.GetAsync(request.TnkId) != null;
|
||
|
||
return isValid.Value;
|
||
}
|
||
|
||
}
|
||
}
|