Exemplo n.º 1
0
        public async Task <CourseInstanceDto> NextQuestion(int courseInstanceId)
        {
            CourseInstance    courseInstanceEntity = _context.Find <CourseInstance>(courseInstanceId);
            CourseInstanceDto result = await GetNextQuestion(courseInstanceEntity);

            await SaveChangesAsync();

            return(result);
        }
Exemplo n.º 2
0
        public async Task <CourseInstanceDto> AnswerQuestionAndGetNextQuestionAsync(QuestionAnswerDto answer)
        {
            await SaveAnswers(answer);

            //Nächste Frage vorbereiten.
            CourseInstanceQuestion courseInstanceQuestionEntity = await _context.FindAsync <CourseInstanceQuestion>(answer.IdCourseInstanceQuestion);

            CourseInstance courseInstanceEntity = await _context.FindAsync <CourseInstance>(courseInstanceQuestionEntity.IdCourseInstance);

            CourseInstanceDto result = await GetNextQuestion(courseInstanceEntity);

            result.AnsweredCorrectly = courseInstanceQuestionEntity.Correct;
            return(result);
        }
Exemplo n.º 3
0
        public async Task <CourseInstanceDto> StartCourseAsync(int courseId)
        {
            Course courseEntity = await _context.FindAsync <Course>(courseId);

            CranUser cranUserEntity = await GetCranUserAsync();

            await _dbLogService.LogMessageAsync($"Starting course {courseId}. Name: {courseEntity.Title}");

            CourseInstance courseInstanceEntity = new CourseInstance
            {
                User     = cranUserEntity,
                Course   = courseEntity,
                IdCourse = courseId,
            };

            await _context.AddAsync(courseInstanceEntity);

            await SaveChangesAsync();

            CourseInstanceDto result = await GetNextQuestion(courseInstanceEntity);

            return(result);
        }
Exemplo n.º 4
0
        private async Task <CourseInstanceDto> GetNextQuestion(CourseInstance courseInstanceEntity)
        {
            CourseInstanceDto result = new CourseInstanceDto();

            result.IdCourse         = courseInstanceEntity.IdCourse;
            result.IdCourseInstance = courseInstanceEntity.Id;

            Course courseEntity = await _context.FindAsync <Course>(courseInstanceEntity.IdCourse);

            result.NumQuestionsAlreadyAsked = await _context.CourseInstancesQuestion.Where(x => x.CourseInstance.Id == courseInstanceEntity.Id)
                                              .CountAsync();

            result.NumQuestionsTotal = courseEntity.NumQuestionsToAsk;

            //Possible Quetions Query
            IQueryable <int> questionIds = PossibleQuestionsQuery(courseInstanceEntity.Id, courseEntity.Language);

            int count = await questionIds.CountAsync();

            if (count == 0 || result.NumQuestionsAlreadyAsked >= courseEntity.NumQuestionsToAsk)
            {
                result.IdCourseInstanceQuestion = 0;
                result.NumQuestionsTotal        = result.NumQuestionsAlreadyAsked;
                result.Done = true;
                await EndCourseAsync(courseInstanceEntity.Id);
            }
            else
            {
                if (count <= result.NumQuestionsTotal - result.NumQuestionsAlreadyAsked)
                {
                    result.NumQuestionsTotal = result.NumQuestionsAlreadyAsked + count;
                }
                int quesitonNo = _random.Next(0, count - 1);
                int questionId = await questionIds.Skip(quesitonNo).FirstAsync();

                Question questionEntity = await _context.FindAsync <Question>(questionId);

                //Course instance question
                CourseInstanceQuestion courseInstanceQuestionEntity = new CourseInstanceQuestion
                {
                    CourseInstance = courseInstanceEntity,
                    Question       = questionEntity,
                    Number         = result.NumQuestionsAlreadyAsked + 1,
                };
                await _context.AddAsync(courseInstanceQuestionEntity);

                //Course instance question options
                IList <QuestionOption> options = await _context.QuestionOptions.Where(option => option.Question.Id == questionEntity.Id).ToListAsync();

                foreach (QuestionOption questionOptionEntity in options)
                {
                    CourseInstanceQuestionOption courseInstanceQuestionOptionEntity = new CourseInstanceQuestionOption();

                    courseInstanceQuestionOptionEntity.QuestionOption = questionOptionEntity;

                    courseInstanceQuestionOptionEntity.CourseInstanceQuestion = courseInstanceQuestionEntity;
                    courseInstanceQuestionEntity.CourseInstancesQuestionOption.Add(courseInstanceQuestionOptionEntity);

                    await _context.AddAsync(courseInstanceQuestionOptionEntity);
                }

                await SaveChangesAsync();

                result.IdCourseInstanceQuestion = courseInstanceQuestionEntity.Id;
            }


            return(result);
        }
Exemplo n.º 5
0
        public async Task TestStartTest()
        {
            TestingContext testingContext = new TestingContext();

            InitTestingContext(testingContext);

            ICourseService courseService = testingContext.GetService <CourseService>();

            testingContext.DependencyMap[typeof(ICourseService)] = courseService;

            ICourseInstanceService courseInstanceService = testingContext.GetService <CourseInstanceService>();


            var courses = await courseService.GetCoursesAsync(0);

            int courseId = courses.Data.Select(x => x.Id).First();

            //Act
            CourseInstanceDto result = await courseInstanceService.StartCourseAsync(courseId);

            Assert.True(result.IdCourseInstance > 0);
            Assert.True(result.IdCourse == courseId);
            Assert.True(result.IdCourseInstanceQuestion > 0);
            Assert.True(result.NumQuestionsAlreadyAsked == 0);
            Assert.True(result.NumQuestionsTotal > 0);

            CourseInstanceDto result2 = await courseInstanceService.NextQuestion(result.IdCourseInstance);

            Assert.True(result2.IdCourse == courseId);
            Assert.True(result2.IdCourseInstanceQuestion > 0);
            Assert.True(result2.NumQuestionsAlreadyAsked == 1);
            Assert.True(result2.NumQuestionsTotal > 0);

            CourseInstanceDto result3 = await courseInstanceService.NextQuestion(result.IdCourseInstance);

            Assert.True(result3.IdCourse == courseId);
            Assert.True(result3.IdCourseInstanceQuestion > 0);
            Assert.True(result3.NumQuestionsAlreadyAsked == 2);
            Assert.True(result3.NumQuestionsTotal > 0);

            QuestionToAskDto result4 = await courseInstanceService.GetQuestionToAskAsync(result.IdCourseInstanceQuestion);

            Assert.Equal(QuestionType.MultipleChoice, result4.QuestionType);

            QuestionAnswerDto answer = new QuestionAnswerDto();

            answer.IdCourseInstanceQuestion = result.IdCourseInstanceQuestion;
            answer.Answers.Add(false);
            answer.Answers.Add(true);
            answer.Answers.Add(false);
            answer.Answers.Add(true);

            QuestionDto result5 = await courseInstanceService.AnswerQuestionAndGetSolutionAsync(answer);

            Assert.True(result5.Explanation != null);
            Assert.Equal(4, result5.Options.Count);
            Assert.True(result5.Options[1].IsTrue);
            Assert.True(result5.Options[3].IsTrue);


            CourseInstanceDto result6 = await courseInstanceService.AnswerQuestionAndGetNextQuestionAsync(answer);

            Assert.True(result6.AnsweredCorrectly);
            Assert.True(result6.Done);
            Assert.Equal(3, result6.NumQuestionsAlreadyAsked);
            Assert.Equal(3, result6.NumQuestionsTotal);
        }
Exemplo n.º 6
0
 public void AddCourse(CourseInstanceDto course)
 {
     _courses.Add(course);
 }
Exemplo n.º 7
0
 public void AddCourse([FromBody] CourseInstanceDto course)
 {
     _courseService.AddCourse(course);
 }