public async Task <IActionResult> GetChapterSummary(int courseId, int chapterNumber, int userId, [FromQuery] DateTime?date) { if (courseId < 1 || chapterNumber < 1 || userId < 1) { return(BadRequest()); } if (IsStudent()) { //students can only see their own chapter summary if (!IsOwnUserId(userId)) { return(Forbid()); } } else if (!IsLector()) { return(Forbid()); } var dateUtc = date?.ToUniversalTime(); try { var chapter = await _chapterService.LoadChapterWithTestsAsync(courseId, chapterNumber); var userExerciseResults = await _chapterService.GetResultsForUserAsync(chapter.Id, userId, dateUtc); var model = _chapterConverter.ToChapterSummaryModel(chapter, userExerciseResults); return(Ok(model)); } catch (DataNotFoundException) { return(NotFound()); } }