public async Task <IActionResult> PostQuiz([FromBody] UserQuizResponse quiz) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } await _quizResultService.AddQuiz(quiz); return(Ok()); }
//UserQuizResponse is what u get from QuizEngine public async Task <UserQuizResponse> AddQuiz(UserQuizResponse quiz) { // inserting in userquizresponse, userquizdetail and updating userresult await _context.UserQuizResponse.InsertOneAsync(quiz); UserQuizDetail userQuizDetail = UpdateUserQuizDetail(quiz); //UpdateUserResult updates the database UpdateUserResults(userQuizDetail); return(quiz); }
public async Task <JsonResult> SubmitQuizResponse([FromBody] QuizSubmitPayload q) { JsonResult result; var user = await GetCurrentUserAsync(); var userProfileId = user?.Id; var quizResponse = new UserQuizResponse() { Response = q.Response, QuizId = q.QuizId, Correct = q.Correct, UserProfileId = userProfileId, DateSubmitted = DateTime.Now }; _ctx.UserQuizResponses.Add(quizResponse); _ctx.SaveChanges(); //TODO: Try catch, better result other than status code. return(result = new JsonResult(new JsonResult(HttpStatusCode.Accepted))); }
public IActionResult SubmitResponse(int userid, int quizid, int questionid, int responseid) { var userQuiz = _context.UserQuiz.FirstOrDefault(uq => uq.UserId == userid && uq.QuizId == quizid); if (userQuiz != null) { var quizResponse = new UserQuizResponse(); quizResponse.IsCorrect = true; quizResponse.UserQuizId = userQuiz.UserQuizId; quizResponse.IsDeleted = false; quizResponse.QuestionId = questionid; quizResponse.CreatedBy = "Admin"; quizResponse.ModifiedBy = "Admin"; quizResponse.CreatedDateTime = DateTime.Now; quizResponse.ModifiedDateTime = DateTime.Now; _context.Add(quizResponse); _context.SaveChanges(); } return(Ok()); }
//Update UserQuizDetail table from the UserQuizResponse to use it in UserResult table. This is to make the code less coupled //so that even if the parameters of the UserQuizDetail has changed, we need not have to change everything. public UserQuizDetail UpdateUserQuizDetail(UserQuizResponse userQuizResponse) { UserQuizDetail userQuizDetail = new UserQuizDetail(); List <QuestionAttempted> questionsAttempted = new List <QuestionAttempted>(); string quizId = userQuizResponse.QuizId; int userId = userQuizResponse.UserId; string domainName = userQuizResponse.DomainName; DateTime time = DateTime.Now; List <Object> questionsList = userQuizResponse.QuestionsAttempted; Console.WriteLine(questionsList.Count + "COUNT"); int questionCount = 1; foreach (var item in questionsList) { QuestionAttempted question = new QuestionAttempted(); try { // Question item = x as Question; Object x = item; JObject Parseddetail = JObject.Parse(JsonConvert.SerializeObject(x)); string questionType = Parseddetail.GetValue("questionType").ToString(); Console.WriteLine("THIS IS THE TYP" + questionType); System.Reflection.Assembly b = System.Reflection.Assembly.Load("Potentiometer.Core"); Type QuestionType = b.GetType("Potentiometer.Core.QuestionTypes." + questionType); object instanceObjectOfQuestion = Activator.CreateInstance(QuestionType); JsonConvert.PopulateObject(JsonConvert.SerializeObject(x), instanceObjectOfQuestion); Console.WriteLine("THIS IS THE POPILATED QUESTION " + JsonConvert.SerializeObject(x)); string questionId = Parseddetail.GetValue("questionId").ToString(); Console.WriteLine("THIS IS THE QUESTION ID " + questionId); string questionText = Parseddetail.GetValue("questionText").ToString(); List <Result.Models.Options> options = JsonConvert.DeserializeObject <List <Result.Models.Options> >(Parseddetail.GetValue("options").ToString()); // Parseddetail.GetValue("options").ToString() ; string conceptTagsString = Parseddetail.GetValue("conceptTags").ToString(); int difficultyLevel = Convert.ToInt32(Parseddetail.GetValue("difficultyLevel").ToString()); //string userResponse = Parseddetail.GetValue("userResponse").ToString(); string raw = Parseddetail.GetValue("raw").ToString(); // string correctOption = Parseddetail.GetValue("correctOption").ToString(); string taxonomy = Parseddetail.GetValue("taxonomy").ToString(); taxonomy = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(taxonomy); Console.WriteLine(conceptTagsString.Substring(1, conceptTagsString.Length - 2).Split(',')); string[] arr = conceptTagsString.Substring(1, conceptTagsString.Length - 2).Split(','); string[] conceptTags = new string[arr.Length]; int index = 0; foreach (string s in arr) { string replacement = Regex.Replace(s, @"\t|\n|\r", ""); replacement = replacement.Replace('"', ' ').Trim(); conceptTags[index] = replacement; index++; } Console.WriteLine("---"); question.QuestionId = questionId; question.QuestionText = questionText; question.QuestionNumber = questionCount++; question.Raw = raw; question.DifficultyLevel = difficultyLevel; question.Taxonomy = taxonomy; question.ConceptTags = conceptTags; question.QuestionType = questionType; List <string> optionList = new List <string>(); foreach (var option in options) { optionList.Add(option.Raw); } question.Options = optionList; if (questionType == "MCQ") { string resp = JsonConvert.DeserializeObject <Result.Models.Options>(Parseddetail.GetValue("response").ToString()).Raw; string ans = JsonConvert.DeserializeObject <Result.Models.Options>(Parseddetail.GetValue("correctAnswer").ToString()).Raw; resp = resp.Trim(); ans = ans.Trim(); Console.WriteLine(resp + " " + resp.Length); Console.WriteLine(ans + " " + ans.Length); question.IsCorrect = (resp == ans); Console.WriteLine(question.IsCorrect); question.Response = resp; question.CorrectAns = ans; } else { List <Result.Models.Options> resp = JsonConvert.DeserializeObject <List <Result.Models.Options> >(Parseddetail.GetValue("response").ToString()); List <Result.Models.Options> ans = JsonConvert.DeserializeObject <List <Result.Models.Options> >(Parseddetail.GetValue("correctAnswer").ToString()); HashSet <string> h = new HashSet <string>(); HashSet <string> h1 = new HashSet <string>(); foreach (var itemm in resp) { h.Add(itemm.Raw); } foreach (var item1 in ans) { h1.Add(item1.Raw); } question.IsCorrect = h.SetEquals(h1) && h.Count == h1.Count; question.ResponseList = resp; question.CorrectAnsList = ans; } questionsAttempted.Add(question); } catch (Exception e) { Console.WriteLine("exception occured -------- " + e); } //string questionId = item.QuestionId; //string questionText = item.QuestionText; //List<Result.Models.Options> options = item.Options; //string questionType = item.QuestionType; //string domain = item.Domain; //string[] conceptTags = item.ConceptTags; //int difficultyLevel = item.DifficultyLevel; //string userResponse = item.Response.Raw; //string raw = item.Raw; //string correctOption = item.CorrectAnswer.Raw; //Boolean isCorrect = (userResponse==correctOption); //string taxonomy = item.Taxonomy; } userQuizDetail.QuizId = quizId; userQuizDetail.UserId = userId; userQuizDetail.Domain = domainName; userQuizDetail.Time = time; userQuizDetail.QuestionsAttempted = questionsAttempted; _context.UserQuizDetail.InsertOne(userQuizDetail); return(userQuizDetail); }