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