feat(api): создан WorkController+валидация входных данных

This commit is contained in:
Mikhail Kuznetsov
2024-03-06 12:10:12 +10:00
parent 3c03ee343c
commit bd595c33c2
4 changed files with 294 additions and 0 deletions

View File

@@ -0,0 +1,42 @@
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;
}
}
}