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!"); } }
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); }