public async Task <IActionResult> QuestionsAsync(TriviaParametersViewModel triviaParameters) { int categoryId = triviaParameters.CategoryId; string difficulty = triviaParameters.Difficulty; string questionType = triviaParameters.QuestionType; int amount = triviaParameters.NumberOfQuestions; var settings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore, MissingMemberHandling = MissingMemberHandling.Ignore }; string sessionToken = HttpContext.Session.GetString("ApiSessionToken"); if (sessionToken == null) { string tokenRequestUrl = @"https://opentdb.com/api_token.php?command=request"; var jsonResponse = await ApiHub.GetJson(tokenRequestUrl); var resultJToken = JsonConvert.DeserializeObject <JToken>(jsonResponse); var apiSessionToken = resultJToken["token"].ToString(); HttpContext.Session.SetString("ApiSessionToken", apiSessionToken); sessionToken = apiSessionToken; } string url = $@"https://opentdb.com/api.php?amount={amount}&category={categoryId}&difficulty={difficulty}&type={questionType}&token={sessionToken}"; var json = await ApiHub.GetJson(url); var result = JsonConvert.DeserializeObject <Questions>(json); TriviaQuestionsViewModel triviaQuestionsViewModel = new TriviaQuestionsViewModel(); triviaQuestionsViewModel.Questions = result; return(View("questions", triviaQuestionsViewModel)); }
public IActionResult Results(TriviaQuestionsViewModel triviaQuestionsViewModel) { TriviaQuestionsViewModel t = triviaQuestionsViewModel; string difficultySelect = t.Questions.Results.First().Difficulty; string categorySelect = t.Questions.Results.First().Category; string typeSelect = t.Questions.Results.First().Type == "multiple" ? "Multiple Choice" : "True/False"; var userId = _userManager.GetUserId(User); PlayerProfile player = _profileRepository.FindByCondition(p => p.UserId == userId).First(); Difficulty difficulty = _difficultyRepository.FindByCondition(q => q.Name == difficultySelect).First(); Category category = _categoryRepository.FindByCondition(q => q.Name == categorySelect).First(); QuestionType type = _questionTypeRepository.FindByCondition(q => q.Name == typeSelect).First(); //Adds Entry to Player's quizes PlayerQuiz quiz = new PlayerQuiz(); quiz.Player = player; quiz.Difficulty = difficulty; quiz.QuestionType = type; quiz.Category = category; quiz.Attempted = t.Questions.Results.Select(q => q.Selected).Count(); quiz.Correct = t.Questions.Results.Where(q => q.Selected == "true").Count(); _quizRepository.Create(quiz); //Adds Entry into Players Cash account PlayerCash playerCash = new PlayerCash(); playerCash.ProfileId = player.Id; int multiplier = 0; switch (difficultySelect) { case "easy": multiplier += quiz.Correct * (typeSelect == "Multiple Choice" ? 2 : 1); break; case "medium": multiplier += quiz.Correct * (typeSelect == "Multiple Choice" ? 2 : 1) * 2; break; case "hard": multiplier += quiz.Correct * (typeSelect == "Multiple Choice" ? 2 : 1) * 3; break; } playerCash.Balance = _cashRepository .FindByCondition(p => p.ProfileId == player.Id) .OrderByDescending(c => c.CreatedDate) .Select(p => p.Balance) .FirstOrDefault(); playerCash.Balance += (multiplier * 10); _cashRepository.Create(playerCash); //Adds Entry to Players Transactions PlayerTransaction playerTransaction = new PlayerTransaction(); playerTransaction.ProfileId = player.Id; playerTransaction.TransactionType = "Trivia"; playerTransaction.TransactionDescription = $"{quiz.Correct} ,{difficultySelect}, {typeSelect} questions"; playerTransaction.Price = multiplier * 10; _transactionRepository.Create(playerTransaction); //Adds Entry to Players Prestige Score PlayerPrestigeScore playerPrestige = new PlayerPrestigeScore(); playerPrestige.ProfileId = player.Id; playerPrestige.Source = "Knowledge Reward"; playerPrestige.Score = _prestigeScoreRepository .FindByCondition(p => p.ProfileId == player.Id) .OrderByDescending(c => c.CreatedDate) .Select(p => p.Score) .FirstOrDefault(); playerPrestige.Score += multiplier * 10; playerPrestige.PointsEarned = multiplier * 10; _prestigeScoreRepository.Create(playerPrestige); return(RedirectToAction("Performance")); }