using AutobusApi.Domain.Enums; using FluentValidation; namespace AutobusApi.Application.TicketGroups.Commands.CreateTicketGroup; public class CreateTicketGroupCommandValidator : AbstractValidator { 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(value, true, out _)); RuleFor(v => v.DocumentType).Must(value => Enum.TryParse(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); }); } }