Exemplo n.º 1
0
        public SubmissionValidator(
            ISerialNumberRepository serialNumberRepository,
            ISubmissionRepository submissionRepository)
        {
            RuleFor(x => x.Birthday)
            .NotNull()
            .LessThanOrEqualTo(
                DateTimeOffset.Now.AddYears(-ValidationConstants
                                            .Submission.Birthday.MinimumAgeNumberOfInYears));
            RuleFor(x => x.EmailAddress).NotNull().EmailAddress();
            RuleFor(x => x.FirstName)
            .NotNull()
            .MaximumLength(ValidationConstants.Submission.FirstName.MaxLength)
            .MinimumLength(ValidationConstants.Submission.FirstName.MinLength);
            RuleFor(x => x.LastName)
            .NotNull()
            .MaximumLength(ValidationConstants.Submission.LastName.MaxLength)
            .MinimumLength(ValidationConstants.Submission.LastName.MinLength);

            RuleFor(x => x.SerialNumberCode).NotNull()
            .MustAsync(
                (code, cancellationToken) => serialNumberRepository
                .ExistsAsync(code, cancellationToken))
            .WithMessage(errorMessage: "The serial number is not valid.")
            .MustAsync(
                (code, cancellationToken) => submissionRepository
                .EnsureNumberOfUsagesLessThanToAsync(code,
                                                     ValidationConstants
                                                     .Submission.SerialNumberCode
                                                     .MaxNumberOfSerialNumberUsages,
                                                     cancellationToken))
            .WithMessage($"The serial number cannot be used more than {ValidationConstants.Submission.SerialNumberCode.MaxNumberOfSerialNumberUsages} times");
        }