protected override Task <FetchPostsResponseDto> ExecuteAsync(FetchPostsRequestDto request, RequestContext context) { var(postDtos, canFetchMore) = _fetchPostsService.FetchPosts(request.UsePostTypeFilter, request.CourseId, request.PostType, request.LastPostCreationTime, request.PostsToFetch, context.UserId); // Create the response var response = new FetchPostsResponseDto(postDtos.ToArray(), canFetchMore); return(Task.FromResult(response)); }
protected override Task <GetCourseResponseDto> ExecuteAsync(GetCourseRequestDto request, RequestContext context) { // Find the course according to the URL var course = _uniwikiContext .Courses .Include(c => c.StudyGroup) .ThenInclude(g => g.University) .Where(c => c.Url == request.CourseUrl && c.StudyGroupUrl == request.StudyGroupUrl && c.UniversityUrl == request.UniversityUrl) .FirstOrDefault() ?? throw new RequestException(_textService.Error_CourseNotFound); // Get categories and their counts for filtering var filterPostTypes = _uniwikiContext .Posts .Where(p => p.CourseId == course.Id) .GroupBy(p => p.PostType) .Select(g => new FilterPostTypeDto(g.Key, g.Count())) .ToArray(); var(postViewModels, canFetchMore) = _fetchPostsService.FetchPosts(!request.ShowAll, course.Id, request.PostType, request.LastPostCreationTime, request.PostsToFetch, context.UserId); var posts = postViewModels.ToArray(); var defaultPostTypes = course.StudyGroup.PrimaryLanguage == Language.Czech ? _defaultPostCategoriesCz : _defaultPostCategoriesEn; // Get categories for a new post var postTypesForNewPost = _uniwikiContext .Posts .Where(p => p.CourseId == course.Id && p.PostType != null) .Select(p => p.PostType !) .Distinct() .AsEnumerable() .Concat(defaultPostTypes) .Distinct() .ToArray(); // Set the course as recent if (context.IsAuthenticated) // Equivalent to context.IsAuthenticated { _courseVisitRepository.AddCourseVisit(course.Id, context.UserId !.Value, _timeService.Now); } // Create response var response = new GetCourseResponseDto(request.PostType, posts, filterPostTypes, course.Id, postTypesForNewPost, canFetchMore, new RecentCourseDto( course.LongName, course.Code, course.StudyGroupUrl, course.StudyGroup.LongName, course.UniversityUrl, course.StudyGroup.University.ShortName, course.Id, course.Url ), course.LongName, course.StudyGroup.University.ShortName + " - " + course.StudyGroup.LongName); return(Task.FromResult(response)); }