Example #1
0
        public CreateRewardDtoValidator(IMemberLevelRepository memberLevelRepository)
        {
            RuleFor(x => x.Title)
            .NotEmpty();

            RuleFor(x => x.Description)
            .NotEmpty();

            RuleFor(x => x.PointsRequired)
            .GreaterThanOrEqualTo(0);

            RuleFor(x => x.ExtraCashAmount)
            .Must((dto, amount) =>
            {
                if (dto.ExtraCashRequired)
                {
                    return(amount.HasValue && amount.Value > 0);
                }

                return(true);
            })
            .WithMessage("Extra cash amount must have a value greater than 0 if extraCashRequired is set to true.");

            RuleFor(x => x.ExpiryDate)
            .GreaterThanOrEqualTo(DateTimeOffset.UtcNow);

            RuleFor(x => x.MinimumMemberLevel)
            .MustAsync(async(level, cancellationToken) =>
            {
                var memberLevel = await memberLevelRepository.GetMemberLevelByLevelAsync(level);
                return(!(memberLevel is null));
            })
            .WithMessage("Member level does not exist.");
        }
Example #2
0
        public async Task <RewardDto> CreateRewardAsync(CreateRewardDto dto)
        {
            // Get minimum member level record for ID
            // Validation of member level existence already handled by DTO validator
            var memberLevel = await _memberLevelRepository.GetMemberLevelByLevelAsync(dto.MinimumMemberLevel);

            // Insert reward record
            var rewardEntity = dto.ToReward();

            rewardEntity.MinimumMemberLevelId = memberLevel.Id;
            var resultEntity = await _rewardRepository.InsertAsync(rewardEntity);

            return(new RewardDto(resultEntity));
        }