示例#1
0
        public async Task <BonusRewardResponseModel> RewardAsync(BonusRewardRequestModel request)
        {
            var result = await _bonusService.RewardAsync(
                request.CustomerId.ToString(),
                request.Amount,
                request.RewardRequestId,
                request.BonusReason,
                request.CampaignId.ToString(),
                request.ConditionId != Guid.Empty
                ?request.ConditionId.ToString()
                    : null);

            return(_mapper.Map <BonusRewardResponseModel>(result));
        }
        public async Task ProcessBonusIssuedEventAsync(IBonusIssued bonusIssued)
        {
            if (string.IsNullOrEmpty(bonusIssued.CustomerId) || bonusIssued.OperationId == Guid.Empty)
            {
                _log.Warning("Bonus Issued event would not be processed because it contains invalid data",
                             context: bonusIssued);
                return;
            }

            BonusRewardResponseModel rewardRequestResult;

            var request = new BonusRewardRequestModel
            {
                CustomerId      = Guid.Parse(bonusIssued.CustomerId),
                Amount          = bonusIssued.Amount,
                RewardRequestId = bonusIssued.OperationId.ToString(),
                BonusReason     = bonusIssued.BonusType,
                CampaignId      = bonusIssued.CampaignId,
                ConditionId     = bonusIssued.ConditionId
            };

            try
            {
                rewardRequestResult = await _blockchainFacadeClient.BonusesApi.RewardAsync(request);
            }
            catch (ClientApiException e)
            {
                _log.Error(e, "Couldn't make reward request to PBF",
                           new
                {
                    e.HttpStatusCode,
                    e.ErrorResponse?.ErrorMessage,
                    ModelErrors = e.ErrorResponse?.ModelErrors?.ToJson(),
                    request     = request.ToJson()
                });

                throw;
            }

            if (rewardRequestResult.Error != BonusRewardError.None)
            {
                _log.Error(message: "Error when trying to create reward operation in BC",
                           context: bonusIssued);
            }

            await _bonusRewardsRepository.AddAsync(bonusIssued);
        }