44 lines
1.7 KiB
C#
44 lines
1.7 KiB
C#
using AutobusApi.Domain.Enums;
|
|
using FluentValidation;
|
|
|
|
namespace AutobusApi.Application.TicketGroups.Commands.CreateTicketGroup;
|
|
|
|
public class CreateTicketGroupCommandValidator : AbstractValidator<CreateTicketGroupCommand>
|
|
{
|
|
public CreateTicketGroupCommandValidator()
|
|
{
|
|
RuleFor(v => v.BuyerFirstName).MinimumLength(2).MaximumLength(32);
|
|
|
|
RuleFor(v => v.BuyerLastName).MinimumLength(2).MaximumLength(32);
|
|
|
|
// https://regexr.com/38pvb
|
|
RuleFor(v => v.BuyerPhoneNumber)
|
|
.NotEmpty().WithMessage("Phone number is required.")
|
|
.Matches(@"^\s*(?:\+?(\d{1,3}))?([-. (]*(\d{3})[-. )]*)?((\d{3})[-. ]*(\d{2,4})(?:[-.x ]*(\d+))?)\s*$").WithMessage("Phone number is invalid.");
|
|
|
|
// https://regexr.com/2ri2c
|
|
RuleFor(v => v.BuyerEmail)
|
|
.NotEmpty().WithMessage("Email address is required.")
|
|
.Matches(@"\b[\w\.-]+@[\w\.-]+\.\w{2,4}\b").WithMessage("Email address is invalid.");
|
|
|
|
RuleFor(v => v.PassengerFirstName).MinimumLength(2).MaximumLength(32);
|
|
|
|
RuleFor(v => v.PassengerLastName).MinimumLength(2).MaximumLength(32);
|
|
|
|
RuleFor(v => v.PassengerPatronymic).MinimumLength(2).MaximumLength(32);
|
|
|
|
RuleFor(v => v.PassengerSex).Must(value => Enum.TryParse<Sex>(value, true, out _));
|
|
|
|
RuleFor(v => v.DocumentType).Must(value => Enum.TryParse<TicketDocumentType>(value, true, out _));
|
|
|
|
RuleFor(v => v.DocumentInformation).MinimumLength(8).MaximumLength(256);
|
|
|
|
RuleForEach(v => v.Tickets).ChildRules(ticket =>
|
|
{
|
|
ticket.RuleFor(v => v.VehicleEnrollmentId).GreaterThan(0);
|
|
ticket.RuleFor(v => v.DepartureAddressId).GreaterThan(0);
|
|
ticket.RuleFor(v => v.ArrivalAddressId).GreaterThan(0);
|
|
});
|
|
}
|
|
}
|