public void Execute()
        {
            using (ReplaysContext db = new ReplaysContext())
            {
                var records = db.Database.SqlQuery <ReplayAllHotsPlayer>(@"SELECT *
                                                                        FROM ReplayAllHotsPlayers
                                                                        WHERE BattleNetId != 0
                                                                        GROUP BY BattleNetId
                                                                        HAVING COUNT(*) > 1").ToList();

                foreach (var record in records)
                {
                    var samePlayerRecords     = db.ReplayAllHotsPlayers.Where(x => x.BattleNetId == record.BattleNetId).OrderBy(x => x.LastSeen);
                    var listSamePlayerRecords = samePlayerRecords.ToList();

                    long originalPlayerId = listSamePlayerRecords[0].PlayerId;
                    listSamePlayerRecords[0].Seen = samePlayerRecords.Sum(x => x.Seen);

                    // copy the records over to the RenamedPlayer table
                    for (int i = 1; i < listSamePlayerRecords.Count; i++)
                    {
                        var player = listSamePlayerRecords[i];
                        ReplayRenamedPlayer replayRenamedPlayer = new ReplayRenamedPlayer
                        {
                            PlayerId          = originalPlayerId,
                            BattleTagName     = player.BattleTagName,
                            BattleNetId       = player.BattleNetId,
                            BattleNetRegionId = player.BattleNetRegionId,
                            BattleNetSubId    = player.BattleNetSubId,
                            DateAdded         = player.LastSeen,
                        };

                        db.ReplayRenamedPlayers.Add(replayRenamedPlayer);

                        long oldPlayerId = listSamePlayerRecords[i].PlayerId;

                        // remove from ReplayAllHotsPlayerHero
                        var allHotsPlayerHero = db.ReplayAllHotsPlayerHeroes.Where(x => x.PlayerId == oldPlayerId);
                        db.ReplayAllHotsPlayerHeroes.RemoveRange(allHotsPlayerHero);

                        // update ReplayMatchPlayers
                        db.ReplayMatchPlayers.Where(x => x.PlayerId == oldPlayerId)
                        .ToList()
                        .ForEach(x => x.PlayerId = originalPlayerId);

                        // update ReplayMatchPlayerTalents
                        db.ReplayMatchPlayerTalents.Where(x => x.PlayerId == oldPlayerId)
                        .ToList()
                        .ForEach(x => x.PlayerId = originalPlayerId);

                        // update ReplayMatchPlayerScoreResults
                        db.ReplayMatchPlayerScoreResults.Where(x => x.PlayerId == oldPlayerId)
                        .ToList()
                        .ForEach(x => x.PlayerId = originalPlayerId);

                        // update ReplayMatchTeamObjectives
                        db.ReplayMatchTeamObjectives.Where(x => x.PlayerId == oldPlayerId)
                        .ToList()
                        .ForEach(x => x.PlayerId = originalPlayerId);

                        // update ReplayMatchAwards
                        db.ReplayMatchAwards.Where(x => x.PlayerId == oldPlayerId)
                        .ToList()
                        .ForEach(x => x.PlayerId = originalPlayerId);

                        // remove from ReplayAllHotsPlayer
                        var allHotsPlayer = db.ReplayAllHotsPlayers.Where(x => x.PlayerId == oldPlayerId);
                        db.ReplayAllHotsPlayers.RemoveRange(allHotsPlayer);

                        db.SaveChanges();
                    }
                }
            }
        }
Example #2
0
        internal override long UpdateRecord(ReplaysContext db, ReplayAllHotsPlayer model)
        {
            ReplayAllHotsPlayer currentRecord;

            if (model.BattleNetId > 0)
            {
                currentRecord = db.ReplayAllHotsPlayers.SingleOrDefault(x => x.BattleNetId == model.BattleNetId &&
                                                                        x.BattleNetRegionId == model.BattleNetRegionId &&
                                                                        x.BattleNetSubId == model.BattleNetSubId);
            }
            else // if its an observer with no battlenetid
            {
                if (!string.IsNullOrEmpty(model.BattleNetTId))
                {
                    currentRecord = db.ReplayAllHotsPlayers.SingleOrDefault(x => x.BattleNetTId == model.BattleNetTId);
                }
                else
                {
                    currentRecord = db.ReplayAllHotsPlayers.SingleOrDefault(x => x.BattleTagName == model.BattleTagName && x.BattleNetRegionId == model.BattleNetRegionId);
                }
            }

            if (currentRecord != null)
            {
                // existing observer record, update the info
                if (currentRecord.BattleNetId < 1)
                {
                    currentRecord.BattleNetId       = model.BattleNetId;
                    currentRecord.BattleNetRegionId = model.BattleNetRegionId;
                    currentRecord.BattleNetSubId    = model.BattleNetSubId;
                    currentRecord.BattleNetTId      = model.BattleNetTId;
                    currentRecord.LastSeen          = model.LastSeen;
                    currentRecord.LastSeenBefore    = model.LastSeenBefore;
                }

                if (model.LastSeen > currentRecord.LastSeen)
                {
                    if (model.BattleTagName != currentRecord.BattleTagName)
                    {
                        ReplayRenamedPlayer samePlayer = new ReplayRenamedPlayer
                        {
                            PlayerId          = currentRecord.PlayerId,
                            BattleNetId       = currentRecord.BattleNetId,
                            BattleTagName     = currentRecord.BattleTagName,
                            BattleNetRegionId = currentRecord.BattleNetRegionId,
                            BattleNetSubId    = currentRecord.BattleNetSubId,
                            BattleNetTId      = currentRecord.BattleNetTId,
                            DateAdded         = model.LastSeen,
                        };

                        new RenamedPlayer().CreateRecord(db, samePlayer);
                    }

                    currentRecord.BattleTagName  = model.BattleTagName;    // update the player's battletag, it may have changed
                    currentRecord.BattleNetTId   = model.BattleNetTId;
                    currentRecord.LastSeenBefore = currentRecord.LastSeen; // important
                    currentRecord.LastSeen       = model.LastSeen;
                }

                if (model.AccountLevel > currentRecord.AccountLevel)
                {
                    currentRecord.AccountLevel = model.AccountLevel;
                }

                currentRecord.Seen += 1;

                db.SaveChanges();
            }

            return(currentRecord.PlayerId);
        }