Ejemplo n.º 1
0
        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));
        }
Ejemplo n.º 2
0
        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));
        }