public async Task <CourseInstanceDto> NextQuestion(int courseInstanceId) { CourseInstance courseInstanceEntity = _context.Find <CourseInstance>(courseInstanceId); CourseInstanceDto result = await GetNextQuestion(courseInstanceEntity); await SaveChangesAsync(); return(result); }
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); }
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); }
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); }
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); }
public void AddCourse(CourseInstanceDto course) { _courses.Add(course); }
public void AddCourse([FromBody] CourseInstanceDto course) { _courseService.AddCourse(course); }