private MatchHistoryLobbySlot GetPlayer(LobbySlot lobbySlot)
        {
            var player = new MatchHistoryLobbySlot {
                Name           = lobbySlot.Name,
                SSteamId       = lobbySlot.User?.SteamId.ToString(),
                Position       = lobbySlot.Position,
                ProfilePrivate = lobbySlot.User != null ? lobbySlot.User.ProfilePrivate: false
            };

            if (lobbySlot.User != null)
            {
                if (lobbySlot.Lobby.Ranked == 2)
                {
                    player.Rank       = lobbySlot.RankDM;
                    player.TotalGames = lobbySlot.GamesStartedDM;
                    player.WinRatio   = lobbySlot.GamesStartedDM > 0 ? lobbySlot.GamesWonDM * 100 / lobbySlot.GamesStartedDM : 0;
                    player.DropRatio  = lobbySlot.GamesStartedDM > 0 ? (lobbySlot.GamesStartedDM - lobbySlot.GamesEndedDM) * 100 / lobbySlot.GamesStartedDM : 0;
                }
                else
                {
                    player.Rank       = lobbySlot.RankRM;
                    player.TotalGames = lobbySlot.GamesStartedRM;
                    player.WinRatio   = lobbySlot.GamesStartedRM > 0 ? lobbySlot.GamesWonRM * 100 / lobbySlot.GamesStartedRM : 0;
                    player.DropRatio  = lobbySlot.GamesStartedRM > 0 ? (lobbySlot.GamesStartedRM - lobbySlot.GamesEndedRM) * 100 / lobbySlot.GamesStartedRM : 0;
                }
                player.GameStats = UserUtils.GetGameStats(lobbySlot.GamesStartedRM, lobbySlot.GamesStartedDM, lobbySlot.GamesWonRM, lobbySlot.GamesWonDM, lobbySlot.GamesEndedRM, lobbySlot.GamesEndedDM);
                LobbyUtils.CalculateUserFieldColors(player, 0);
            }
            return(player);
        }
        public IEnumerable <Player> Get()
        {
            //Secondary where clause is done in memory because there seems to be an EF bug
            var users = _repository.Users.Where(u => u.Games > 0).ToList().Where(u => u.SteamId > 0).Select(u => new Player {
                Name      = u.Name,
                RankRM    = u.RankRM,
                RankDM    = u.RankDM,
                SSteamId  = u.SteamId.ToString(),
                GameStats = UserUtils.GetGameStats(u.GamesStartedRM, u.GamesStartedDM, u.GamesWonRM, u.GamesWonDM, u.GamesEndedRM, u.GamesEndedDM),
                Profile   = new PlayerProfile {
                    Location           = u.Location,
                    ProfilePrivate     = u.ProfilePrivate,
                    ProfileDataFetched = u.ProfileDataFetched
                },
                ReputationStats = new PlayerReputationStats {
                    Games = u.Games,
                    NegativeReputation = u.NegativeReputation,
                    PositiveReputation = u.PositiveReputation
                }
            }).ToList();

            foreach (var user in users)
            {
                LobbyUtils.CalculateUserFieldColors(user, 0);
            }
            return(users);
        }
        public User Get(string id)
        {
            var user = _repository.Users.Include(u => u.LobbySlots).ThenInclude(ls => ls.Lobby).Include(u => u.Reputations).ThenInclude(ur => ur.Reputation).Include(u => u.Reputations).ThenInclude(u => u.Lobby).Select(u => new User {
                Id                 = u.Id,
                SSteamId           = u.SteamId.ToString(),
                Name               = u.Name,
                Location           = u.Location,
                Games              = u.Games,
                PositiveReputation = u.PositiveReputation,
                NegativeReputation = u.NegativeReputation,
                RankRM             = u.RankRM,
                RankDM             = u.RankDM,
                GamesStartedRM     = u.GamesStartedRM,
                GamesEndedRM       = u.GamesEndedRM,
                GamesWonRM         = u.GamesWonRM,
                GamesStartedDM     = u.GamesStartedDM,
                GamesEndedDM       = u.GamesEndedDM,
                GamesWonDM         = u.GamesWonDM,
                ProfilePrivate     = u.ProfilePrivate,
                ProfileDataFetched = u.ProfileDataFetched.HasValue ? u.ProfileDataFetched.Value.ToString("d") : null,
                KnownNames         = u.LobbySlots.Select(ls => ls.Name).Distinct().OrderBy(ls => ls).ToList(),
                ReputationStats    = new PlayerReputationStats()
                {
                    Games = u.Games,
                    PositiveReputation = u.PositiveReputation,
                    NegativeReputation = u.NegativeReputation
                },
                Reputations = u.Reputations.OrderByDescending(r => r.Added).Select(ur => new UserReputation {
                    Id         = ur.Id,
                    Comment    = ur.Comment,
                    Added      = ur.Added.ToString("d"),
                    Reputation = new Reputation {
                        Id   = ur.Reputation.Id,
                        Name = ur.Reputation.Name,
                        Type = ur.Reputation.Type,
                    },
                    Lobby = ur.Lobby != null ? new Models.Lobby {
                        Id   = ur.Lobby.Id,
                        Name = ur.Lobby.Name
                    } : null
                }).ToList(),
                Matches = u.LobbySlots.Where(ls => ls.Lobby.Started.HasValue && ls.Position > 0).OrderByDescending(ls => ls.Lobby.Joined).Select(ls => new MatchHistory {
                    Id     = ls.Lobby.Id,
                    Name   = ls.Lobby.Name,
                    Joined = ls.Lobby.Joined.ToString("d")
                }).ToList()
            }).FirstOrDefault(u => u.SSteamId == id);

            user.GameStats = UserUtils.GetGameStats(user.GamesStartedRM, user.GamesStartedDM, user.GamesWonRM, user.GamesWonDM, user.GamesEndedRM, user.GamesEndedDM);
            LobbyUtils.CalculateUserFieldColors(user, 0);
            return(user);
        }
 public Lobby Get(string id)
 {
     if (id == "0")
     {
         if (Variables.Lobby != null)
         {
             lock (Variables.LobbyPlayers) {
                 LobbyUtils.CalculateLobbyPlayerFieldColors();
                 Variables.Lobby.Players  = Variables.LobbyPlayers.OrderBy(lp => lp.Position);
                 Variables.Lobby.SLobbyId = Variables.Lobby.LobbyId.ToString();
                 foreach (var player in Variables.Lobby.Players)
                 {
                     player.SSteamId = player.SteamId.ToString();
                 }
                 return(Variables.Lobby);
             }
         }
         else
         {
             return(null);
         }
     }
     else
     {
         var longLobbyId  = ulong.Parse(id);
         var runningLobby = _repository.Lobbies.Include(l => l.Players).ThenInclude(ls => ls.User).FirstOrDefault(l => l.LobbyId == longLobbyId);
         var lobby        = new Commons.Models.Lobby {
             LobbyId  = runningLobby.LobbyId,
             SLobbyId = runningLobby.LobbyId.ToString(),
             GameType = runningLobby.GameType,
             Name     = runningLobby.Name,
             Ranked   = runningLobby.Ranked,
             Players  = runningLobby.Players.Where(p => p.Position > 0).OrderBy(p => p.Position).Select(p => new Player {
                 Name        = p.Name,
                 SteamId     = p.User != null ? p.User.SteamId : 0,
                 SSteamId    = p.User?.SteamId.ToString(),
                 LobbySlotId = p.Id,
                 Position    = p.Position,
                 Rank        = runningLobby.Ranked == 2 ? p.RankDM : p.RankRM,
                 RankRM      = p.RankRM,
                 RankDM      = p.RankDM,
                 Profile     = p.User != null ? new PlayerProfile {
                     Location           = p.User.Location,
                     ProfileDataFetched = p.User.ProfileDataFetched,
                     ProfilePrivate     = p.User.ProfilePrivate
                 } : null,
                 ReputationStats = p.User != null ? new PlayerReputationStats {
                     Games = p.User.Games,
                     PositiveReputation = p.User.PositiveReputation,
                     NegativeReputation = p.User.NegativeReputation
                 } : null,
                 GameStats = p.User != null ? UserUtils.GetGameStats(p.GamesStartedRM, p.GamesStartedDM, p.GamesWonRM, p.GamesWonDM, p.GamesEndedRM, p.GamesEndedDM) : null,
             }).ToList()
         };
         foreach (var player in lobby.Players)
         {
             LobbyUtils.CalculateUserFieldColors(player, lobby.Ranked);
         }
         return(lobby);
     }
 }