Files
parr_api/PARR.API/Validators/WorkRequestValidator.cs

59 lines
2.3 KiB
C#
Raw Normal View History

using FluentValidation;
using PARR.API.Contracts.V1.Requests;
using PARR.BLL.Services.Interfaces;
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,
ITemplateMaskValidator templateMaskValidator
)
{
this.tnkService = tnkService;
RuleFor(t => t.Name).NotEmpty().NotNull();
RuleFor(t => t.TemplateNameMask)
.NotEmpty()
.NotNull();
//TODO Сделать проверку по шорткодам и возможным полям
//RuleFor(t => t.TemplateNameMask)
// .Must((entity, value, c) => templateMaskValidator
// .IsValid(entity.TemplateNameMask))
// .WithMessage($"Неверно указана маска имени шаблонов. Обязательными условиями являются" +
// $" наличие кодового слова \"ПАРР\" и обязательное использование динамической составляющей" +
// $" %ЭК%. Доступные значения динамических составляющих:" +
// $" {string.Join(", ", Shortcodes.GetAll().Select(sc => sc.Name + " - " + sc.Description))}"
// );
RuleFor(t => t.EsppId).NotEmpty().NotNull().WithMessage("EsppId не может быть пустым");
RuleFor(t => t.TnkId).NotEmpty().NotNull();
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;
}
}
}