Exemplo n.º 1
0
        public IActionResult ExecuteQuery(int idExam, [FromBody] SubmissionAnswer a, int?idUser = null)
        {
            var exam = unitOfWork.ExamRepository.Get(e => e.Id == idExam, includeProperties: "Database, Questions.Children").FirstOrDefault();

            if (idUser != null && CurrentUser?.Admin != true)
            {
                return(BadRequest("Invalid user"));
            }
            if (idUser == null)
            {
                idUser = CurrentUser?.Id;
            }
            try
            {
                if (exam != null)
                {
                    if (a.Question == null)
                    {
                        a.Question = exam.Questions.Union(exam.Questions.SelectMany(q => q.Children)).FirstOrDefault(q => q.Id == a.IdQuestion);
                    }
                    var connString = string.Format(configuration.GetConnectionString("execConnString"),
                                                   exam.Database.Name + (exam.UserSpecificDb == true ? $"_{idUser}" : ""));
                    return(Ok(sqlRunner.ExecuteSql(a.AnswerText, connString, action: a.Question?.IdType == QuestionType.SqlAction)));
                }
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.Message));
            }
            return(BadRequest("No exam found"));
        }
Exemplo n.º 2
0
 private void SaveSubmissions(Submission submDesc, Submission submSource)
 {
     if (submDesc != null && submSource != null)
     {
         foreach (var answer in submSource.SubmissionAnswers)
         {
             var destAnswer = submDesc.SubmissionAnswers.FirstOrDefault(a => a.IdQuestion == answer.IdQuestion);
             if (destAnswer == null)
             {
                 destAnswer = new SubmissionAnswer
                 {
                     IdQuestion = answer.IdQuestion,
                     AnswerText = answer.AnswerText
                 };
                 submDesc.SubmissionAnswers.Add(destAnswer);
             }
             else
             {
                 destAnswer.AnswerText = answer.AnswerText;
             }
         }
         unitOfWork.Save();
     }
 }
Exemplo n.º 3
0
 public IActionResult GetSubmission(int id)
 {
     if (CurrentUser?.Admin == true)
     {
         var submission = unitOfWork.SubmissionRepository.Get(s => s.Id == id,
                                                              includeProperties: "Exam,SubmissionAnswers.Question.Parent,User, SubmissionAnswers.Logs,SubmissionQuestionOrders").FirstOrDefault();
         if (submission != null)
         {
             foreach (var l in submission.SubmissionAnswers.SelectMany(a => a.Logs))
             {
                 l.AnswerText = string.Empty;
             }
             var dictOrders = submission.SubmissionQuestionOrders.ToDictionary(so => so.IdQuestion);
             var answers    = new List <SubmissionAnswer>();
             foreach (var a in submission.SubmissionAnswers)
             {
                 if (a.Question.IdParent == null)
                 {
                     if (dictOrders.ContainsKey(a.IdQuestion))
                     {
                         a.Question.OrderNo = dictOrders[a.IdQuestion].OrderNo;
                     }
                     answers.Add(a);
                 }
                 else
                 {
                     var answer = answers.FirstOrDefault(x => x.IdQuestion == a.Question.IdParent);
                     if (answer == null)
                     {
                         answer = new SubmissionAnswer
                         {
                             IdQuestion   = a.Question.IdParent,
                             Question     = a.Question.Parent,
                             ChildAnswers = new List <SubmissionAnswer>(),
                             Logs         = new List <SubmissionAnswerLog>()
                         };
                         if (dictOrders.ContainsKey(answer.IdQuestion))
                         {
                             answer.Question.OrderNo = dictOrders[answer.IdQuestion].OrderNo;
                         }
                         answers.Add(answer);
                     }
                     else
                     {
                         if (answer.Logs == null)
                         {
                             answer.Logs = new List <SubmissionAnswerLog>();
                         }
                         if (a.Logs != null)
                         {
                             answer.Logs.AddRange(a.Logs);
                         }
                     }
                     answer.ChildAnswers.Add(a);
                 }
             }
             submission.SubmissionAnswers = answers.OrderBy(a => a.Question.OrderNo).ToList();
             return(Ok(submission));
         }
         return(BadRequest("No submission found"));
     }
     return(Unauthorized());
 }