public async Task <ServiceResponse <object> > SubmitQuiz(List <QuizSubmissionDto> model) { List <QuizSubmission> ListToAdd = new List <QuizSubmission>(); foreach (var item in model) { var TrueAnswers = (from q in _context.QuizQuestions join ans in _context.QuizAnswers on q.Id equals ans.QuestionId where ans.IsTrue == true && q.Id == item.QuestionId && q.QuizId == item.QuizId select ans).ToList(); var submission = new QuizSubmission { QuizId = item.QuizId, QuestionId = item.QuestionId, AnswerId = item.AnswerId, //IsCorrect = TrueAnswers.Select(m => m.Id).Contains(Convert.ToInt32(item.AnswerId)) ? true : false, Description = item.Description, CreatedDateTime = DateTime.UtcNow, UserId = _LoggedIn_UserID }; if (TrueAnswers.Count() == 1) { submission.IsCorrect = TrueAnswers.Select(m => m.Id).Contains(Convert.ToInt32(item.AnswerId)) ? true : false; submission.ResultMarks = submission.IsCorrect == true?_context.QuizQuestions.FirstOrDefault(m => m.QuizId == item.QuizId && m.Id == item.QuestionId).Marks.Value : 0; } else if (TrueAnswers.Count() == 2) { //int ContainCount = TrueAnswers.Where(m => m.Id == Convert.ToInt32(item.AnswerId)).Count(); submission.IsCorrect = TrueAnswers.Select(m => m.Id).Contains(Convert.ToInt32(item.AnswerId)) ? true : false; double set = _context.QuizQuestions.FirstOrDefault(m => m.QuizId == item.QuizId && m.Id == item.QuestionId).Marks.Value / 2; submission.ResultMarks = submission.IsCorrect == true ? set : 0; } ListToAdd.Add(submission); } await _context.QuizSubmissions.AddRangeAsync(ListToAdd); await _context.SaveChangesAsync(); var toCreateTrans = new StudentActivityTransaction { StudentId = _LoggedIn_UserID, Value = _LoggedIn_UserName + " you submit a quiz at " + DateFormat.ToDateTime(DateTime.UtcNow), Details = "", UpdatedDateTime = DateTime.UtcNow }; await _context.StudentActivityTransactions.AddAsync(toCreateTrans); await _context.SaveChangesAsync(); _serviceResponse.Success = true; _serviceResponse.Data = CustomMessage.Added; return(_serviceResponse); }
public async Task PlayQuiz(string userId, QuizSubmissionModel model) { var quiz = _context.Quizzes.FirstOrDefault(x => x.Id == model.QuizId); using (var transaction = _context.Database.BeginTransaction()) { try { var quizSubmissionId = model.Id ?? Guid.NewGuid().ToString(); var entity = new QuizSubmission() { Id = quizSubmissionId, QuizzardUserId = userId, QuizId = model.QuizId, SubmittedOn = DateTime.Now, Answers = new List <QuizSubmissionAnswer>() }; //entity.Answers = model.Answers.Select(x => new QuizSubmissionAnswer() //{ // Id = Guid.NewGuid().ToString(), // UserOwnedQuestionId = quiz.UserAttachedQuestions.FirstOrDefault(z => z.Id == x.QuestionId).Id, // QuestionId = quiz.Questions.FirstOrDefault(z => z.Id == x.QuestionId).Id, // SubmissionId = quizSubmissionId, // UserAnswer = x.UserAnswer //}).ToList(); foreach (var x in model.Answers) { var userQuestionId = quiz.UserAttachedQuestions.FirstOrDefault(z => z.Id == x.QuestionId)?.Id; var questionId = quiz.Questions.FirstOrDefault(z => z.Id == x.QuestionId)?.Id; var userAnswer = new QuizSubmissionAnswer() { Id = Guid.NewGuid().ToString(), UserOwnedQuestionId = userQuestionId, QuestionId = questionId, SubmissionId = quizSubmissionId, UserAnswer = x.UserAnswer }; entity.Answers.Add(userAnswer); } _context.QuizSubmissions.Add(entity); await _context.SaveChangesAsync(); transaction.Commit(); } catch (Exception e) { transaction.Rollback(); } } }