Files
predavanja/Events-WebApi/Events.WebAPI.Contract/Validation/Person/AddPersonValidator.cs
2026-05-14 12:57:49 +02:00

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 AddPersonValidator : AbstractValidator<AddCommand<PersonDTO, int>>
{
public AddPersonValidator(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.Validate);
}
}