2024-03-06 12:10:12 +10:00
|
|
|
|
using FluentValidation;
|
|
|
|
|
|
using PARR.API.Contracts.V1.Requests;
|
2025-04-17 16:38:35 +10:00
|
|
|
|
using PARR.BLL.Services.Interfaces;
|
2024-03-06 12:10:12 +10:00
|
|
|
|
using PARR.DAL.Services.Interfaces;
|
|
|
|
|
|
|
|
|
|
|
|
namespace PARR.API.Validators
|
|
|
|
|
|
{
|
|
|
|
|
|
public class WorkRequestValidator : AbstractValidator<WorkRequest>
|
|
|
|
|
|
{
|
|
|
|
|
|
private readonly ITnkService tnkService;
|
|
|
|
|
|
|
|
|
|
|
|
private bool? isValid = null;
|
|
|
|
|
|
|
|
|
|
|
|
public WorkRequestValidator(
|
2025-04-17 16:38:35 +10:00
|
|
|
|
ITnkService tnkService,
|
|
|
|
|
|
ITemplateMaskValidator templateMaskValidator
|
2024-03-06 12:10:12 +10:00
|
|
|
|
)
|
|
|
|
|
|
{
|
|
|
|
|
|
this.tnkService = tnkService;
|
|
|
|
|
|
|
2024-05-20 11:38:48 +10:00
|
|
|
|
RuleFor(t => t.Name).NotEmpty().NotNull();
|
2024-03-06 12:10:12 +10:00
|
|
|
|
|
2025-04-17 16:38:35 +10:00
|
|
|
|
RuleFor(t => t.TemplateNameMask)
|
|
|
|
|
|
.NotEmpty()
|
|
|
|
|
|
.NotNull();
|
2025-08-01 14:45:36 +10:00
|
|
|
|
|
|
|
|
|
|
//TODO Сделать проверку по шорткодам и возможным полям
|
|
|
|
|
|
//RuleFor(t => t.TemplateNameMask)
|
|
|
|
|
|
// .Must((entity, value, c) => templateMaskValidator
|
|
|
|
|
|
// .IsValid(entity.TemplateNameMask))
|
|
|
|
|
|
// .WithMessage($"Неверно указана маска имени шаблонов. Обязательными условиями являются" +
|
|
|
|
|
|
// $" наличие кодового слова \"ПАРР\" и обязательное использование динамической составляющей" +
|
|
|
|
|
|
// $" %ЭК%. Доступные значения динамических составляющих:" +
|
|
|
|
|
|
// $" {string.Join(", ", Shortcodes.GetAll().Select(sc => sc.Name + " - " + sc.Description))}"
|
|
|
|
|
|
// );
|
2025-04-17 16:38:35 +10:00
|
|
|
|
|
2024-03-06 12:10:12 +10:00
|
|
|
|
RuleFor(t => t.EsppId).NotEmpty().NotNull().WithMessage("EsppId не может быть пустым");
|
|
|
|
|
|
|
2024-05-20 11:38:48 +10:00
|
|
|
|
RuleFor(t => t.TnkId).NotEmpty().NotNull();
|
2024-03-06 12:10:12 +10:00
|
|
|
|
|
|
|
|
|
|
RuleFor(t => t.TnkId)
|
|
|
|
|
|
.MustAsync(async (entity, value, c) => await IsTnkExist(entity))
|
2024-05-20 11:38:48 +10:00
|
|
|
|
.WithMessage("Указан несуществующий Id ТНК");
|
2024-03-06 12:10:12 +10:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private async Task<bool> IsTnkExist(WorkRequest request)
|
|
|
|
|
|
{
|
|
|
|
|
|
//чтобы не делать 2 раза валидацию
|
|
|
|
|
|
if (isValid.HasValue)
|
|
|
|
|
|
return isValid.Value;
|
|
|
|
|
|
|
|
|
|
|
|
isValid = await tnkService.GetAsync(request.TnkId) != null;
|
|
|
|
|
|
|
|
|
|
|
|
return isValid.Value;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|