public void Create(GameCategories gameCategories)
 {
     if (_context.Games.Where(a => a.GameId == gameCategories.GameId).FirstOrDefault() != null)
     {
         foreach (var categoryId in gameCategories.CategoriesId)
         {
             if (_context.Categories.Where(a => a.CategoryId == categoryId).SingleOrDefault() != null)
             {
                 CategoryGame categoryGame = new CategoryGame
                 {
                     GameId     = gameCategories.GameId,
                     CategoryId = categoryId
                 };
                 _context.CategoryGames.Add(categoryGame);
                 _context.SaveChanges();
             }
             else
             {
                 throw new Exception("Category does not exist!");
             }
         }
     }
     else
     {
         throw new Exception("Gameroom does not exist!");
     }
 }
Exemplo n.º 2
0
        public QuizResult EndGame(User user, bool won = true, bool timeOver = false)
        {
            var gameIndex = _runningGames.FindIndex(g => g.UserId == user.UserId);

            // TODO: Throw error if no game has been found (gameIndex = -1)

            var runningGame = _runningGames[gameIndex];

            _runningGames.RemoveAt(gameIndex);

            var game = new Game
            {
                Start  = runningGame.TimeStarted,
                UserId = user.UserId
            };
            var gameId = _gameRepository.Create(game);

            if (runningGame.CurrentQuestion != null)
            {
                runningGame.CurrentQuestion.TimeAnswered = DateTime.Now;
                runningGame.AskedQuestions.Add(runningGame.CurrentQuestion);
            }
            foreach (var question in runningGame.AskedQuestions)
            {
                var round = new Round
                {
                    Duration   = (int)(question.TimeAnswered - question.TimeAsked).TotalSeconds,
                    AnswerId   = question.AnsweredAnswer?.AnswerId,
                    GameId     = gameId,
                    QuestionId = question.QuestionId,
                    UsedJoker  = question.JokerUsed
                };
                _roundRepository.Create(round);
            }

            foreach (var category in runningGame.Categories)
            {
                var categoryGame = new CategoryGame(category, gameId);
                _categoryGameRepository.Create(categoryGame);
            }

            var result = runningGame.End(won, timeOver);

            var questionId = runningGame.CurrentQuestion?.QuestionId ??
                             runningGame.AskedQuestions.Last().QuestionId;
            var answerSpecification =
                new QuizAnswerSpecification(questionId: questionId, correct: true);
            var answer = _answerRepository.Query(answerSpecification).First();

            result.CorrectAnswer = answer.Answer;

            return(result);
        }