public Guid ApplyForBonus(DepositBonusApplication model) { using (var scope = CustomTransactionScope.GetTransactionScope()) { var validationResult = _bonusQueries.GetValidationResult(model); if (validationResult.IsValid == false) { throw new RegoException(validationResult.Errors.First().ErrorMessage); } var player = _repository.GetLockedPlayer(model.PlayerId); var redemptionParams = new RedemptionParams { TransferAmount = model.Amount, TransferExternalId = model.DepositId, TransferWalletTemplateId = player.Data.Brand.WalletTemplates.Single(wt => wt.IsMain).Id }; var bonusId = model.BonusId ?? _repository.GetLockedBonus(model.BonusCode).Data.Id; var redemption = RedeemBonus(model.PlayerId, bonusId, redemptionParams); redemption.Events.ForEach(_eventBus.Publish); scope.Complete(); return(redemption.Data.Id); } }
public Guid AddUpdateBonus(CreateUpdateBonus model) { var validationResult = _bonusQueries.GetValidationResult(model); if (validationResult.IsValid == false) { throw new RegoException(string.Join("/n", validationResult.Errors.Select(failure => failure.ErrorMessage))); } var bonus = _bonusMapper.MapModelToBonus(model); return(model.Id == Guid.Empty ? AddBonus(bonus) : UpdateBonus(bonus)); }