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();
        }
Пример #3
0
        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);
        }