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);
        }
 public static BonusIssuedEventDataEntity Create(IBonusIssued model)
 {
     return(new BonusIssuedEventDataEntity
     {
         CustomerId = model.CustomerId,
         OperationId = model.OperationId,
         Amount = model.Amount,
         PartnerId = model.PartnerId,
         LocationId = model.LocationId,
         UnitLocationCode = model.UnitLocationCode,
         CampaignId = model.CampaignId,
         ConditionId = model.ConditionId,
         TimeStamp = model.TimeStamp,
         BonusType = model.BonusType,
         ReferralId = model.ReferralId
     });
 }
Example #3
0
        public async Task AddAsync(IBonusIssued model)
        {
            using (var context = _contextFactory.CreateDataContext())
            {
                var entity = BonusIssuedEventDataEntity.Create(model);

                await context.BonusIssuedEventsData.AddAsync(entity);

                try
                {
                    await context.SaveChangesAsync();
                }
                catch (DbUpdateException e)
                {
                    if (e.InnerException is SqlException sqlException &&
                        sqlException.Number == MsSqlErrorCodes.PrimaryKeyConstraintViolation)
                    {
                        _log.Warning("Error on bonus issued event context saving", e);
                    }
        public async Task AddAsync(IBonusIssued model)
        {
            using (var context = _contextFactory.CreateDataContext())
            {
                var entity = BonusIssuedEventDataEntity.Create(model);

                await context.BonusIssuedEventsData.AddAsync(entity);

                try
                {
                    await context.SaveChangesAsync();
                }
                catch (DbUpdateException e)
                {
                    if (e.InnerException is PostgresException sqlException &&
                        sqlException.SqlState == PostgresErrorCodes.UniqueViolation)
                    {
                        _log.Warning("Error on bonus issued event context saving", e);
                    }