public override void Do(GameAction gameAction)
        {
            if (string.IsNullOrWhiteSpace(gameAction.UserId))
            {
                return;
            }

            UserStats statistics = this.statisticsRepository.Retrieve(gameAction.UserId);
            if (statistics == null)
            {
                statistics = new UserStats
                {
                    UserId = gameAction.UserId,
                    Victories = 0,
                    Defeats = 0,
                    GameCount = 0
                };
            }

            statistics.Defeats += GetValue(gameAction.CommandData, "Defeats");
            statistics.Victories += GetValue(gameAction.CommandData, "Victories");
            statistics.GameCount += GetValue(gameAction.CommandData, "GameCount");

            this.statisticsRepository.Save(statistics);
        }
        public void Save(UserStats stats)
        {
            stats.RowKey = EncodeKey(stats.UserId);
            UserStats currentStat = this.statsTable.Query.Where(item => item.RowKey == stats.RowKey).FirstOrDefault();
            if (currentStat != null)
            {
                this.statsTable.DeleteEntity(currentStat);
            }

            this.statsTable.AddEntity(stats);
        }
 private static UserStats CreateUpdatedStats(UserStats originalStatistics)
 {
     var statistics = new UserStats
     {
         UserId = originalStatistics.UserId,
         Victories = originalStatistics.Victories,
         Defeats = originalStatistics.Defeats,
         GameCount = originalStatistics.GameCount
     };
     return statistics;
 }
        private static UserStats UpdateCurrentStats(GameAction gameAction, UserStats originalStatistics)
        {
            if (originalStatistics == null)
            {
                originalStatistics = new UserStats();
                originalStatistics.UserId = gameAction.UserId;
            }

            originalStatistics.Victories += GetValue(gameAction.CommandData, "Victories");
            originalStatistics.Defeats += GetValue(gameAction.CommandData, "Defeats");
            originalStatistics.GameCount += GetValue(gameAction.CommandData, "GameCount");
            return originalStatistics;
        }
        private void BulkInsertTestData(IStatisticsRepository repository)
        {
            var rnd = new Random();

            for (int i = 0; i < 100; i++)
            {
                var stats = new UserStats()
                {
                    UserId = "testuser_" + i.ToString(),
                    Victories = rnd.Next(1000),
                    Defeats = rnd.Next(1000)
                };

                repository.Save(stats);
            }
        }
        public void Save(UserStats stats)
        {
            using (var db = new StatisticsContext(this.NameOrConnectionString))
            {
                var old = db.Statistics.FirstOrDefault(e => e.UserId.Equals(stats.UserId, StringComparison.OrdinalIgnoreCase));

                if (old != null)
                {
                    old.Victories = stats.Victories;
                    old.Defeats = stats.Defeats;
                    old.GameCount = stats.GameCount;
                }
                else
                {
                    db.Statistics.Add(stats);
                }

                db.SaveChanges();
            }
        }
 public void Save(UserStats stats)
 {
     throw new NotImplementedException();
 }