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."); }
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)); }