Доделал валидатор

This commit is contained in:
Mikhail Trubnikov
2023-09-20 16:10:52 +10:00
parent a3a486242c
commit bdf160a98e
2 changed files with 21 additions and 15 deletions

View File

@@ -1,5 +1,4 @@
using AutoMapper; using FluentValidation;
using FluentValidation;
using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc;
using PARR.API.Contracts.V1; using PARR.API.Contracts.V1;
using PARR.API.Contracts.V1.Requests; using PARR.API.Contracts.V1.Requests;
@@ -7,7 +6,6 @@ using PARR.API.Contracts.V1.Responses.Base;
using PARR.API.Controllers.V1.Base; using PARR.API.Controllers.V1.Base;
using PARR.API.Services.Interfaces; using PARR.API.Services.Interfaces;
using PARR.BLL.Domain.Mq; using PARR.BLL.Domain.Mq;
using PARR.DAL.Services.Interfaces;
using System.Text.Json; using System.Text.Json;
namespace PARR.API.Controllers.V1 namespace PARR.API.Controllers.V1

View File

@@ -7,31 +7,39 @@ namespace PARR.API.Validators
{ {
public class GeneratorTemplateRequestValidator : AbstractValidator<GeneratorTemplateRequest> public class GeneratorTemplateRequestValidator : AbstractValidator<GeneratorTemplateRequest>
{ {
private readonly IApplicationService applicationService; private readonly IApplicationsInWorkService applicationsInWorkService;
public GeneratorTemplateRequestValidator(IApplicationService applicationService) private bool? isValid = null;
public GeneratorTemplateRequestValidator(IApplicationsInWorkService applicationsInWorkService)
{ {
this.applicationService = applicationService; this.applicationsInWorkService = applicationsInWorkService;
RuleFor(t => t.WorkId).NotEmpty(); RuleFor(t => t.WorkId)
.MustAsync(async (entity, value, c) => await IsApplicationContainWork(entity, entity.ApplicationId))
.WithMessage("У данной работы нет связанных приложений");
RuleFor(t => t.ApplicationId) RuleFor(t => t.ApplicationId)
.MustAsync(async (entity, value, c) => await IsExistApplication(entity, value)) .MustAsync(async (entity, value, c) => await IsApplicationContainWork(entity, value))
.WithMessage("Нет приложения с таким Id."); .WithMessage("У данного приложения нет связанных работ");
RuleFor(t => t.Ek).NotEmpty(); //TODO: возможно сделать проверку, по данному выражению есть ли ЭК
RuleFor(t => t.Ek).NotEmpty().WithMessage("ЭК, принимает регулярное выражение. Например: *, ВРТ-*-ДВС");
RuleFor(t => t.Action) RuleFor(t => t.Action)
.Must(t => t.ToLower() == GenerateTemplateActionsEnum.create.ToString() || t.ToLower() == GenerateTemplateActionsEnum.deactivate.ToString()) .Must(t => t.ToLower() == GenerateTemplateActionsEnum.create.ToString() || t.ToLower() == GenerateTemplateActionsEnum.deactivate.ToString())
.WithMessage($"Допустимые значения: {GenerateTemplateActionsEnum.create}, {GenerateTemplateActionsEnum.deactivate}"); .WithMessage($"Допустимые значения: {GenerateTemplateActionsEnum.create}, {GenerateTemplateActionsEnum.deactivate}");
} }
//todo: сделать валидацию в тбл AppInWorks private async Task<bool> IsApplicationContainWork(GeneratorTemplateRequest request, Guid applicationId)
private async Task<bool> IsExistApplication(GeneratorTemplateRequest request, Guid applicationId)
{ {
return await applicationService.GetAsync(applicationId) != null; //чтобы не делать 2 раза валидацию
if (isValid.HasValue)
return isValid.Value;
isValid = await applicationsInWorkService.Get(applicationId, request.WorkId) != null;
return isValid.Value;
} }
} }
} }