Esempio n. 1
0
        private TodaysGamesViewModel MapToTodaysGamesViewModel(int sportsEventId, IEnumerable <Game> todaysGames,
                                                               int numberOfDaysFromToday)
        {
            var todaysGamesViewModel = new TodaysGamesViewModel();
            var userBets             = _userBetRepository.GetAllUserBetsBySportsEventIdWithoutResultBet(sportsEventId);

            var teams  = _teamRepository.GetTeamsBySportsEventId(sportsEventId);
            var result = _resultRepository.GetResultBySportsEventId(1);

            var todaysGamesSpecification = CreateTodaysGamesSpecification(todaysGames, result, userBets, teams);

            todaysGamesViewModel.NumberOfDaysFromToday    = numberOfDaysFromToday;
            todaysGamesViewModel.TodaysGamesSpecification = todaysGamesSpecification;

            return(todaysGamesViewModel);
        }
Esempio n. 2
0
        public string UpdateUserScores(UserBet referenceUserBet, int sportsEventId = 1)
        {
            var invalidUserBets            = "";
            var gameIdsToUsersWithMaxScore = new Dictionary <int, List <string> >();
            var userBets = _userBetRepository.GetAllUserBetsBySportsEventIdWithoutResultBet(sportsEventId);

            var groupGames = _gameRepository.GetGroupGamesBySportsEventId(sportsEventId);

            var scoreBases        = _scoreBasisRepository.GetScoreBasisesBySportsEventId(sportsEventId);
            var userScores        = _userScoreRepository.GetAllUserScoresBySportsEventId(sportsEventId);
            var maxGroupGameScore = scoreBases.Where(x => x.GameType == (int)GameType.GroupGame).Max(x => x.Points);

            AddNewUserScoresBasedOnUserBets(sportsEventId, userBets, userScores);

            foreach (var userBet in userBets)
            {
                if (UserBetIsInvalid(userBet))
                {
                    invalidUserBets += "   " + userBet.UserId;
                    continue;
                }

                var referenceBets        = referenceUserBet.Bets;
                var referencePlayoffBets = referenceUserBet.PlayoffBets;

                var currentUserScore = userScores.First(x => x.UserId == userBet.UserId);
                currentUserScore.Score = 0;

                foreach (var referenceBet in referenceBets)
                {
                    var currentBet   = userBet.Bets.Single(x => x.GameId == referenceBet.GameId);
                    var currentGame  = groupGames.First(x => x.Id == referenceBet.GameId);
                    var scoreForGame =
                        _gameScoreCalculator.GetScoreForUserOnGame(referenceBet, currentBet, currentGame, scoreBases);
                    if (scoreForGame == maxGroupGameScore)
                    {
                        if (gameIdsToUsersWithMaxScore.ContainsKey(currentGame.Id))
                        {
                            gameIdsToUsersWithMaxScore[currentGame.Id].Add(userBet.UserId);
                        }
                        else
                        {
                            gameIdsToUsersWithMaxScore.Add(currentGame.Id, new List <string> {
                                userBet.UserId
                            });
                        }
                    }


                    currentUserScore.Score += scoreForGame;
                }

                currentUserScore.TopScorerScore = _topScorerScoreCalculator.Calculate(referenceUserBet, userBet, scoreBases);
                currentUserScore.PlayoffScore   = AddScoresForPlayoffGames(referencePlayoffBets, userBet, scoreBases);
                currentUserScore.BonusScore     = 0;
            }

            AddBonusPoints(userScores, userBets, gameIdsToUsersWithMaxScore);
            _userScoreRepository.SaveOrUpdateUserScores(userScores);

            return(invalidUserBets);
        }