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

46 lines
2.1 KiB
C#
Raw Normal View History

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<GeneratorTemplateRequest>
{
2023-09-20 16:10:52 +10:00
private readonly IApplicationsInWorkService applicationsInWorkService;
2023-09-20 16:10:52 +10:00
private bool? isValid = null;
public GeneratorTemplateRequestValidator(IApplicationsInWorkService applicationsInWorkService)
{
2023-09-20 16:10:52 +10:00
this.applicationsInWorkService = applicationsInWorkService;
2023-09-20 16:10:52 +10:00
RuleFor(t => t.WorkId)
.MustAsync(async (entity, value, c) => await IsApplicationContainWork(entity, entity.ApplicationId))
.WithMessage("У данной работы нет связанных приложений");
RuleFor(t => t.ApplicationId)
2023-09-20 16:10:52 +10:00
.MustAsync(async (entity, value, c) => await IsApplicationContainWork(entity, value))
.WithMessage("У данного приложения нет связанных работ");
2023-09-20 16:10:52 +10:00
//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}");
}
2023-09-20 16:10:52 +10:00
private async Task<bool> IsApplicationContainWork(GeneratorTemplateRequest request, Guid applicationId)
{
2023-09-20 16:10:52 +10:00
//чтобы не делать 2 раза валидацию
if (isValid.HasValue)
return isValid.Value;
isValid = await applicationsInWorkService.Get(applicationId, request.WorkId) != null;
return isValid.Value;
}
}
}