Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 3
0
        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)));
        }
Ejemplo n.º 4
0
        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);
        }