private void HandleLowBalance(LowBalanceEventMessage lowBalance) { var watch = Stopwatch.StartNew(); var match = lowBalance.Offer.Percentage * lowBalance.Conversion.Amount; InsessionEligibility eligibility = new InsessionEligibility { CreditAmount = match, OfferId = lowBalance.Offer.OfferId.ToString(), GamingSystemId = lowBalance.Conversion.GamingSystemId, ProductId = lowBalance.Conversion.ProductId, UserId = lowBalance.Conversion.UserId }; ExperienceResult experience = new ExperienceResult { Experience = "BadMarginGoodBetSize", MatchOffer = $"{match}" }; PlayerExperienceBlockData blockData = new PlayerExperienceBlockData(experience, eligibility); /////////Block var transaction = _experienceBlockRepository.Get(INSESSION_TRANSACTION_NAME, $"{eligibility.GamingSystemId}-{eligibility.ProductId}-{eligibility.UserId}").Result; IBlock lastBlock = transaction.GetLastBlock(); IBlock currentBlock = new Block(lastBlock.Index, "Experience_Calculated_v1", blockData.ToJson(), watch.Elapsed, lastBlock.Hash); transaction.Add(currentBlock); if (transaction.IsValid()) { PubishInsessionEligibility(eligibility); PubishTransction(new TransactionMessage.Insession(transaction)); } /////////// }
private void HandleConversion(ConversionModel conversion) { var watch = Stopwatch.StartNew(); conversion.TimeStamp = DateTime.Now; _logger.LogInformation($"Received new conversion {conversion.ToJson()}"); UserModel user = new UserModel { UserId = conversion.UserId, GamingSystemId = conversion.GamingSystemId, ProductId = conversion.ProductId }; DailyDealEligibilityModel eligibility = _eligibilityRepository.Get(user).Result; if (eligibility != null) { if (eligibility.HasOffers()) { OfferModel offer = eligibility.OfferList.FirstOrDefault(o => o.IsClaimed == false); eligibility.OfferList.Remove(offer); offer.IsClaimed = true; offer.ClaimDateTime = DateTime.Now; eligibility.OfferList.Add(offer); var lowBalance = new LowBalanceEventMessage(conversion, offer); /////////Block var transaction = _eligibilityBlockRepository.Get(INSESSION_TRANSACTION_NAME, $"{eligibility.GamingSystemId}-{eligibility.ProductId}-{eligibility.UserId}").Result; IBlock lastBlock = transaction.GetLastBlock(); IBlock currentBlock = new Block(lastBlock.Index, "Conversion_Received_v1", lowBalance.ToJson(), watch.Elapsed, lastBlock.Hash); transaction.Add(currentBlock); if (transaction.IsValid()) { _eligibilityRepository.Update(eligibility); PubishTransction(new TransactionMessage.Insession(transaction)); Context.System.Scheduler.ScheduleTellOnce(TimeSpan.FromSeconds(60), Self, lowBalance, Self); } else { _logger.LogError($"Invalid transaction for {conversion.GamingSystemId}-{conversion.ProductId}-{conversion.UserId}. Terminating..."); } /////////// } else { _logger.LogWarning($"User {user.ToJson()} has no offers left."); /////////Block var transaction = _eligibilityBlockRepository.Get(INSESSION_TRANSACTION_NAME, $"{eligibility.GamingSystemId}-{eligibility.ProductId}-{eligibility.UserId}").Result; IBlock lastBlock = transaction.GetLastBlock(); IBlock currentBlock = new Block(lastBlock.Index, "Offers_Used_v1", "", watch.Elapsed, lastBlock.Hash); transaction.Add(currentBlock); if (transaction.IsValid()) { _eligibilityRepository.Update(eligibility); PubishTransction(new TransactionMessage.Insession(transaction)); } /////////// } } else { _logger.LogWarning($"Plyer has no eligibility:: {user.ToJson()}"); } }