private void HandleDailyDealEligibility(DailyDealEligibilityModel eligibility) { _logger.LogInformation("Received new eligibility"); var watch = Stopwatch.StartNew(); _eligibilityRepository.Create(eligibility); var tId = $"{eligibility.GamingSystemId}-{eligibility.ProductId}-{eligibility.UserId}"; IBlockChain transaction = new BlockChain(INSESSION_TRANSACTION_NAME, tId); IBlock lastBlock = transaction.GetLastBlock(); IBlock currentBlock = new Block(lastBlock.Index, "Daily_Deal_Created_v1", eligibility.ToJson(), watch.Elapsed, lastBlock.Hash); transaction.Add(currentBlock); if (transaction.IsValid()) { var insessTransaction = new TransactionMessage.Insession(transaction); PubishTransction(insessTransaction); var conversion = new ConversionModel() { Amount = 250, GamingSystemId = eligibility.GamingSystemId, ProductId = eligibility.ProductId, UserId = eligibility.UserId }; Context.System.Scheduler.ScheduleTellOnce(TimeSpan.FromSeconds(10), Self, conversion, Self); } }
public void Create(DailyDealEligibilityModel eligibility) { var updateOptions = new UpdateOptions { IsUpsert = true }; FilterDefinition <DailyDealEligibilityModel> query = Builders <DailyDealEligibilityModel> .Filter.Eq("_id", eligibility.Id); _collection.ReplaceOne( query, eligibility, updateOptions ); }
private void InitOffers() { IList <DailyDealEligibilityModel> list = new List <DailyDealEligibilityModel>(); var eligibility = new DailyDealEligibilityModel() { GamingSystemId = 9000, UserId = 1, ProductId = 9001, TimeStamp = DateTime.Now.Date, OfferList = new List <OfferModel>() { new OfferModel { Percentage = 100, Description = "100% up to 1000", TimeStamp = DateTime.Now.Date }, new OfferModel { Percentage = 50, Description = "50% up to 500", TimeStamp = DateTime.Now.Date }, new OfferModel { Percentage = 30, Description = "30% up to 300", TimeStamp = DateTime.Now.Date } } }; var eligibility2 = new DailyDealEligibilityModel { GamingSystemId = 9000, UserId = 2, ProductId = 9001, TimeStamp = DateTime.Now.Date, OfferList = new List <OfferModel>() { new OfferModel { Percentage = 100, Description = "100% up to 1000", TimeStamp = DateTime.Now.Date }, new OfferModel { Percentage = 50, Description = "50% up to 500", TimeStamp = DateTime.Now.Date } } }; var eligibility3 = new DailyDealEligibilityModel { GamingSystemId = 9000, UserId = 3, ProductId = 9001, TimeStamp = DateTime.Now.Date, OfferList = new List <OfferModel>() { new OfferModel { Percentage = 100, Description = "100% up to 1000", TimeStamp = DateTime.Now.Date }, new OfferModel { Percentage = 60, Description = "60% up to 600", TimeStamp = DateTime.Now.Date }, new OfferModel { Percentage = 40, Description = "40% up to 400", TimeStamp = DateTime.Now.Date }, new OfferModel { Percentage = 20, Description = "20% up to 200", TimeStamp = DateTime.Now.Date } } }; list.Add(eligibility); list.Add(eligibility2); list.Add(eligibility3); foreach (var e in list) { Context.System.Scheduler.ScheduleTellOnce(TimeSpan.FromSeconds(0), Self, e, Self); } }
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()}"); } }
public async Task Update(DailyDealEligibilityModel eligibility) { await _collection.ReplaceOneAsync(doc => doc.Id == eligibility.Id, eligibility, new UpdateOptions { IsUpsert = true }); }