public void AddMatch(Match match)
        {
            //Sort
            var sortedUserlist = match.PlayerList.OrderBy(x => x).ToList();
            var addedList = string.Join("", sortedUserlist.ToArray());

            //RecalculateLeaderboard hashstring
            var hashcode = addedList.GetHashCode();

            //Find existing matchup historys that have the same players
            List<MatchupResult> matchingResults = _matchupResultRepository.GetByHashResult(hashcode);

            //Find the team constalation with same team setup
            var team1 = new List<string> { match.PlayerList[0], match.PlayerList[1] }.OrderBy(x => x).ToList();
            var team2 = new List<string> { match.PlayerList[2], match.PlayerList[3] }.OrderBy(x => x).ToList();

            MatchupResult correctMatchupResult = null;
            foreach (var matchResult in matchingResults)
            {
                var sortedFoundMatchResultTeam1 = new List<string> { matchResult.UserList[0], matchResult.UserList[1] }.OrderBy(x => x).ToList();
                var sortedFoundMatchResultTeam2 = new List<string> { matchResult.UserList[2], matchResult.UserList[3] }.OrderBy(x => x).ToList();

                if (team1[0] == sortedFoundMatchResultTeam1[0] && team1[1] == sortedFoundMatchResultTeam1[1])
                {
                    correctMatchupResult = matchResult;
                    break;
                } else if (team2[0] == sortedFoundMatchResultTeam2[0] && team2[1] == sortedFoundMatchResultTeam2[1])
                {
                    correctMatchupResult = matchResult;
                    break;
                }
            }

            //Add match
            if (correctMatchupResult != null)
            {
                AddMatchupResult(correctMatchupResult, match);
                _matchupResultRepository.SaveMatchupResult(correctMatchupResult);
            }
            else
            {
                //Create new matchcupresult
                var matchup = new MatchupResult
                {
                    HashResult = hashcode,
                    Last5Games = new List<MatchResult> {match.MatchResult},
                    Team1Wins = 0,
                    Team2Wins = 0,
                    UserList = match.PlayerList
                };
                _matchupResultRepository.SaveMatchupResult(matchup);
            }
        }
        public void AddMatchupResult(MatchupResult existingMatchupResult, Match match)
        {
            //Find out if team 1
            if (match.PlayerList[0] == existingMatchupResult.UserList[0] ||
                match.PlayerList[0] == existingMatchupResult.UserList[1])
            {
                if (match.MatchResult.Team1Won)
                {
                    existingMatchupResult.Team1Wins++;
                }
                else
                {
                    existingMatchupResult.Team2Wins++;
                }
            }
            else
            {
                if (match.MatchResult.Team1Won)
                {
                    existingMatchupResult.Team2Wins++;
                }
                else
                {
                    existingMatchupResult.Team1Wins++;
                }
            }

            if (existingMatchupResult.Last5Games.Count < 5)
            {
                //TODO Need to take care when team 1 of existing is not the same as team1 in match
                existingMatchupResult.Last5Games.Insert(0, match.MatchResult);
            }
            else
            {
                existingMatchupResult.Last5Games.RemoveAt(4);
                existingMatchupResult.Last5Games.Insert(0, match.MatchResult);
            }
        }