/// <summary> /// Executes the default behavior for saving an aswer. /// </summary> /// <param name="savedAnswer"></param> /// <param name="answer"></param> /// <param name="repository"></param> /// <param name="question"></param> /// <param name="insert"></param> /// <param name="update"></param> private void SaveAnswer(Answer savedAnswer, AnswerModelViewBase answer, IRepository repository, Domain.Question question, Func <IRepository, AnswerQuestionOption> insert, Func <IRepository, AnswerQuestionOption, bool> update) { // If it came until here, we know that it is likely to be a valid request savedAnswer.AnsweredAt = DateTime.Now; //Changing to know the last time the user answered // Loading the last option that the user selected AnswerQuestionOption answerOption = null; if (savedAnswer.Answers != null) { answerOption = savedAnswer.Answers.FirstOrDefault(r => r.Question.Id == answer.Question.Id); } else { savedAnswer.Answers = new List <AnswerQuestionOption>(); } // If it is null, means that the user have not answered the question yet if (answerOption == null) { answerOption = insert(repository); answerOption.Question = question; savedAnswer.Answers.Add(answerOption); } else { update(repository, answerOption); } repository.SaveChanges(); }
/// <summary> /// Auxiliar method for getting the persisted answer for a quiz application and determined question. /// </summary> /// <param name="repository"></param> /// <param name="answer"></param> /// <param name="idQuestion"></param> /// <returns></returns> private AnswerModelViewBase CreateInfoAnswer(IRepository repository, Answer answer, int idQuestion) { AnswerQuestionOption infoAnswer = repository.GetAnswerQuestionOptionByQuestioId(answer.Id, idQuestion); if (infoAnswer != null) { AnswerModelViewBase returnAnswer = CreateAnswerModelView(repository, answer, idQuestion, infoAnswer); if (returnAnswer != null) { returnAnswer.Id = infoAnswer.Id; return(returnAnswer); } } return(null); }