autobus-api_old/AutobusApi.Application/TicketGroups/Commands/CreateTicketGroup/CreateTicketGroupCommandValidator.cs

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);
});
}
}