public async Task UpdateQuestion(apiModels.Question question) { if (question == null) { throw new ArgumentNullException(nameof(question)); } var text = question.Text.TrimToNull(); if (text == null) { throw new InvalidOperationException("Question With Empty Text cannot be updated!"); } var dbQuestion = await _dbContext.Question.Include(i => i.Answer).FirstOrDefaultAsync(q => q.Id == question.Id) ?? throw new InvalidOperationException("Wrong Question Id Provided."); dbQuestion.Text = text; dbQuestion.CorrectAnswerId = question.CorrectAnswer?.Id; if (question.AvailableAnswers?.Any() == true) { await _dbContext.SaveChangesAsync(); foreach (var answer in question.AvailableAnswers.Where(w => dbQuestion.Answer.All(a => a.Text != w.Text)).ToList()) { await CreateAnswer(dbQuestion.Id, answer); } } await _dbContext.SaveChangesAsync(); }
public async Task CreateQuestion(int quizId, apiModels.Question question) { if (question == null) { throw new ArgumentNullException(nameof(question)); } var questionText = question.Text.TrimToNull(); if (questionText == null) { throw new InvalidOperationException("Question Cannot be created with Empty Text!"); } var dbQuiz = await _dbContext.Quiz.FirstOrDefaultAsync(q => q.Id == quizId) ?? throw new InvalidOperationException("Wrong Quiz Id Provided."); var dbQuestion = new Question { Text = questionText, QuizId = dbQuiz.Id, CorrectAnswerId = question.CorrectAnswer?.Id }; _dbContext.Question.Add(dbQuestion); if (question.AvailableAnswers?.Any() == true) { await _dbContext.SaveChangesAsync(); // we need question Id foreach (var answer in question.AvailableAnswers) { await CreateAnswer(dbQuestion.Id, answer); } } if (question.CorrectAnswer != null) { throw new InvalidOperationException("you cannot create Question with correct answer when you dnt know the answer id"); } await _dbContext.SaveChangesAsync(); }
public static apiModels.Question ToApiModel(dbModels.Question question) { if (question == null) { return(null); } var apiModelQuestion = new apiModels.Question { Id = question.Id, Text = question.Text }; if (!question.Answer.Any()) { return(apiModelQuestion); } apiModelQuestion.AvailableAnswers = question.Answer.Select(ToApiModel).ToList(); apiModelQuestion.CorrectAnswer = question.CorrectAnswerId.HasValue ? ToApiModel(question.Answer.First(f => f.Id == question.CorrectAnswerId)) : null; return(apiModelQuestion); }