SHA256
- IssueDate is now Nullable. Is not required for DNI and NIE document types. - Improvements in SupportNumber for NIE documents. - Address search can now be skipped.
94 lines
3.0 KiB
C#
94 lines
3.0 KiB
C#
using FluentValidation;
|
|
using Somnia.GuestLog.Models.DTOs;
|
|
using Somnia.GuestLog.Services;
|
|
using Somnia.GuestLog.Utils;
|
|
|
|
namespace Somnia.GuestLog.Validators;
|
|
|
|
/// <summary>
|
|
/// Validator for GuestDocumentDTO which contains multiple rules and can be shared with the back end API
|
|
/// </summary>
|
|
public class GuestDocumentDTOValidator : ValueValidator<GuestDocumentDTO>
|
|
{
|
|
public GuestDocumentDTOValidator(IDataListService dataListService)
|
|
{
|
|
RuleFor(x => x.DocumentType)
|
|
.Cascade(CascadeMode.Stop)
|
|
.NotEmpty()
|
|
.Must(val => val != null && dataListService.IsValueInList(GuestConsts.DataList_DocumentTypes, val));
|
|
|
|
RuleFor(x => x.DocumentNum)
|
|
.NotEmpty()
|
|
.Length(6, 32);
|
|
|
|
RuleFor(x => x.IssueDate)
|
|
.Cascade(CascadeMode.Stop)
|
|
.NotEmpty()
|
|
.When(x => x.Nationality != GuestConsts.CountryCode_ESP)
|
|
.LessThanOrEqualTo(DateTime.Today);
|
|
|
|
RuleFor(x => x.SupportNum)
|
|
.Cascade(CascadeMode.Stop)
|
|
.NotEmpty()
|
|
.Matches(RegexUtils.RegexGuestDocSupportNumberDNI()).WithMessage("Invalid Format for DNI. Expected 'AAA000000'.")
|
|
.When(x => x.DocumentType == GuestConsts.DocumentType_DNI);
|
|
|
|
RuleFor(x => x.SupportNum)
|
|
.Cascade(CascadeMode.Stop)
|
|
.NotEmpty()
|
|
.Matches(RegexUtils.RegexGuestDocSupportNumberNIE()).WithMessage("Invalid Format for NIE. Expected 'E00000000'.")
|
|
.When(x => x.DocumentType == GuestConsts.DocumentType_NIE);
|
|
|
|
RuleFor(x => x.Name)
|
|
.NotEmpty()
|
|
.Length(1, 100);
|
|
|
|
RuleFor(x => x.Surname)
|
|
.NotEmpty()
|
|
.Length(1, 100);
|
|
|
|
RuleFor(x => x.BirthDate)
|
|
.NotEmpty()
|
|
.LessThanOrEqualTo(DateTime.Today);
|
|
|
|
RuleFor(x => x.Nationality)
|
|
.Cascade(CascadeMode.Stop)
|
|
.NotEmpty()
|
|
.Must(val => val != null && dataListService.IsValueInList(GuestConsts.DataList_CountryCodes, val));
|
|
|
|
|
|
//Contact Fields
|
|
RuleFor(x => x.EmailAddress)
|
|
.EmailAddress()
|
|
.When(x => !string.IsNullOrEmpty(x.EmailAddress));
|
|
|
|
RuleFor(x => x.PhoneNumber)
|
|
.Matches(RegexUtils.RegexPhoneNumber()).WithMessage("Invalid format")
|
|
.When(x => !string.IsNullOrEmpty(x.PhoneNumber));
|
|
|
|
RuleFor(x => x.AddressCountry)
|
|
.NotEmpty()
|
|
.Must(val => val != null && dataListService.IsValueInList(GuestConsts.DataList_CountryCodes, val));
|
|
|
|
// RuleFor(x => x.CCNumber)
|
|
// .NotEmpty()
|
|
// .Length(1, 100)
|
|
// .CreditCard();
|
|
|
|
// RuleFor(x => x.Address.Address)
|
|
// .NotEmpty()
|
|
// .Length(1, 100);
|
|
|
|
// RuleFor(x => x.Address.City)
|
|
// .NotEmpty()
|
|
// .Length(1, 100);
|
|
|
|
// RuleFor(x => x.Address.Country)
|
|
// .NotEmpty()
|
|
// .Length(1, 100);
|
|
|
|
// RuleForEach(x => x.OrderDetails)
|
|
// .SetValidator(new OrderDetailsModelFluentValidator());
|
|
}
|
|
}
|