using cuqmbr.TravelGuide.Application.Common.Interfaces.Services; using cuqmbr.TravelGuide.Domain.Enums; using FluentValidation; using Microsoft.Extensions.Localization; namespace cuqmbr.TravelGuide.Application.Routes.Commands.AddRoute; public class AddRouteCommandValidator : AbstractValidator { public AddRouteCommandValidator( IStringLocalizer localizer, SessionCultureService cultureService) { RuleFor(v => v.Name) .NotEmpty() .WithMessage(localizer["FluentValidation.NotEmpty"]) .MaximumLength(64) .WithMessage( String.Format( cultureService.Culture, localizer["FluentValidation.MaximumLength"], 64)); RuleFor(v => v.VehicleType) .Must((v, vt) => VehicleType.Enumerations.ContainsValue(vt)) .WithMessage( String.Format( localizer["FluentValidation.MustBeInEnum"], String.Join( ", ", VehicleType.Enumerations.Values.Select(e => e.Name)))); RuleFor(v => v.Addresses.Count) .GreaterThanOrEqualTo(2) .WithMessage( String.Format( cultureService.Culture, localizer["FluentValidation.GreaterThanOrEqualTo"], 2)); RuleFor(v => v.Addresses) .Must((v, a) => a.DistinctBy(e => e.Order).Count() == a.Count()) .WithMessage(localizer["Validation.DistinctOrder"]); } }