46 lines
1.6 KiB
C#
46 lines
1.6 KiB
C#
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<AddRouteCommand>
|
|
{
|
|
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"]);
|
|
}
|
|
}
|