44 lines
1.9 KiB
C#
44 lines
1.9 KiB
C#
using Events.WebAPI.Contract.Command;
|
|
using Events.WebAPI.Contract.DTOs;
|
|
using Events.WebAPI.Contract.Validation;
|
|
using FluentValidation;
|
|
using MediatR;
|
|
|
|
namespace Events.WebAPI.Contract.Validation.Person;
|
|
|
|
public class UpdatePersonValidator : AbstractValidator<UpdateCommand<PersonDTO>>
|
|
{
|
|
public UpdatePersonValidator(IMediator mediator, IValidationMessageProvider validationMessageProvider)
|
|
{
|
|
var uniqueIndexValidator = new UniqueIndexValidator<PersonDTO, int>(
|
|
mediator,
|
|
(_, _) => validationMessageProvider.UniquePersonDocumentAndCountry(),
|
|
t => t.DocumentNumber,
|
|
t => t.CountryCode);
|
|
|
|
RuleFor(a => a.Dto.FirstName).MaximumLength(100);
|
|
RuleFor(a => a.Dto.LastName).MaximumLength(100);
|
|
RuleFor(a => a.Dto.FirstNameTranscription).NotEmpty().MaximumLength(100);
|
|
RuleFor(a => a.Dto.LastNameTranscription).NotEmpty().MaximumLength(100);
|
|
RuleFor(a => a.Dto.AddressLine).MaximumLength(200);
|
|
RuleFor(a => a.Dto.PostalCode).MaximumLength(20);
|
|
RuleFor(a => a.Dto.City).MaximumLength(100);
|
|
RuleFor(a => a.Dto.AddressCountry).MaximumLength(100);
|
|
When(a => !string.IsNullOrWhiteSpace(a.Dto.Email), () =>
|
|
{
|
|
RuleFor(a => a.Dto.Email).MaximumLength(255).EmailAddress();
|
|
});
|
|
RuleFor(a => a.Dto.ContactPhone).MaximumLength(50);
|
|
RuleFor(a => a.Dto.BirthDate).NotEmpty();
|
|
RuleFor(a => a.Dto.DocumentNumber).NotEmpty().MaximumLength(50);
|
|
RuleFor(a => a.Dto.CountryCode).NotEmpty().MaximumLength(3);
|
|
ValidationMessage emailOrContactPhoneRequired = validationMessageProvider.PersonEmailOrContactPhoneRequired();
|
|
RuleFor(a => a.Dto)
|
|
.Must(dto => !string.IsNullOrWhiteSpace(dto.Email) || !string.IsNullOrWhiteSpace(dto.ContactPhone))
|
|
.WithMessage(emailOrContactPhoneRequired.Message)
|
|
.WithErrorCode(emailOrContactPhoneRequired.Code);
|
|
|
|
RuleFor(a => a.Dto).CustomAsync(uniqueIndexValidator.ValidateExisting);
|
|
}
|
|
}
|