public async Task <LearningQuiz> CreateLearningQuizAsync(Guid quizId, string userId)
        {
            var isPublic = await _quizzesRepository.IsPublicAsync(quizId);

            if (!isPublic)
            {
                var access = await _quizzesRepository.HaveReadAccessToQuizAsync(userId, quizId);

                if (!access)
                {
                    return(null);
                }
            }

            var creationTime = CurrentTime;

            var questionsQuery = _questionsRepository
                                 .GetAllByQuizId(quizId)
                                 .Where(q => q.CreationTime <= creationTime);

            var learningQuiz = new LearningQuiz {
                CreationTime      = creationTime,
                UserId            = userId,
                QuizId            = quizId,
                NumberOfQuestions = await questionsQuery.CountAsync()
            };

            var settings = await _userSettingsRepository.GetByIdOrDefault(userId);

            var questions = questionsQuery
                            .Select(q => new LearningQuizQuestion {
                QuestionId    = q.Id,
                Reoccurrences = settings.ReoccurrencesOnStart
            });

            await _learningQuizzesRepository.Create(learningQuiz);

            _learningQuizzesRepository.AddQuestions(learningQuiz, questions);
            var result = await Context.SaveChangesAsync() > 0;

            return(result ? learningQuiz : null);
        }
Beispiel #2
0
 public async Task <UserSettings> GetUserSettingsByIdAsync(string userId)
 {
     return(await _userSettingsRepository.GetByIdOrDefault(userId));
 }