public async Task <int> GetPostsCountInNewsFeed(string userId, PostSearchParams searchParams) { Community community = await _communityRepository.GetByConditionAsync(x => x.Name == searchParams.CommunityName); Guard.Against.NullItem(community, nameof(community)); searchParams.Followers = await _userRepository.ListUserFollowingsAsync(userId); var specification = new PostFilterSpecification(searchParams); return(await _postRepository.GetTotalCountAsync(specification)); }
public async Task <int> GetPostsCountAsync(PostSearchParams searchParams) { Community community = await _communityRepository.GetByConditionAsync(x => x.Name == searchParams.CommunityName); Guard.Against.NullItem(community, nameof(community)); User user = await _userManager.FindByIdAsync(searchParams.UserId); Guard.Against.NullItem(user.Id, nameof(user)); var specification = new PostFilterSpecification(searchParams); return(await _postRepository.GetTotalCountAsync(specification)); }
public async Task <IActionResult> GetMany([FromQuery] PostSearchParams searchParams) { if (!BaseHelpers.IsPaginatonSearchParamsValid(searchParams, out ErrorResponse errorResponse)) { return(new BadRequestObjectResult(errorResponse)); } FilteredDataViewModel <PostViewModel> result = await _mediator.Send(new GetPostsQuery(searchParams)); return(Ok(new FilteredResponse <PostViewModel>(searchParams) { Data = result.Data, Count = result.Count, })); }
public async Task <IEnumerable <PostViewModel> > GetPostsAsync(PostSearchParams searchParams) { User user = await _userManager.FindByIdAsync(searchParams.UserId); Guard.Against.NullItem(user, nameof(user)); Community community = await _communityRepository.GetByConditionAsync(x => x.Name == searchParams.CommunityName); Guard.Against.NullItem(community, nameof(community)); var specification = new PostFilterSpecification(searchParams); return(await _postRepository.ListAsync <PostViewModel>(specification, PostHelpers.GetPostMapperConfiguration())); }
public async Task <IActionResult> NewsFeed([FromQuery] PostSearchParams searchParams) { if (!BaseHelpers.IsPaginatonSearchParamsValid(searchParams, out ErrorResponse errorResponse)) { return(new BadRequestObjectResult(errorResponse)); } string userId = _httpContext.User.FindFirstValue("sub"); FilteredDataViewModel <PostViewModel> result = await _mediator.Send(new GetNewsFeedQuery(userId, searchParams)); return(Ok(new FilteredResponse <PostViewModel>(searchParams) { Data = result.Data, Count = result.Count, })); }
public PostFilterSpecification(PostSearchParams searchParams) : base(x => (string.IsNullOrEmpty(searchParams.CommunityName) || (x.Community.Name == searchParams.CommunityName)) && (string.IsNullOrEmpty(searchParams.PostTitle) || x.Title.Contains(searchParams.PostTitle)) && (string.IsNullOrEmpty(searchParams.UserId) || (x.AuthorId == searchParams.UserId)) && ((searchParams.Followers == null) || searchParams.Followers.Contains(x.AuthorId)) ) { AddIncludes(query => query.Include(x => x.Community).Include(x => x.Author).Include(x => x.PostVotes) ); if (searchParams.OrderByDir.ToUpper() == "DESC") { ApplyFieldOrderByDescending(searchParams.SortBy); } else { ApplyFieldOrderBy(searchParams.SortBy); } ApplyPaging(searchParams.Offset, searchParams.Limit); }
public GetNewsFeedQuery(string userId, PostSearchParams searchParams) { UserId = userId; SearchParams = searchParams; }
public GetPostsQuery(PostSearchParams searchParams) { SearchParams = searchParams; }
public async Task <IEnumerable <PostViewModel> > GetNewsFeedPosts(string userId, PostSearchParams searchParams) { Community community = await _communityRepository.GetByConditionAsync(x => x.Name == searchParams.CommunityName); Guard.Against.NullItem(community, nameof(community)); searchParams.Followers = await _userRepository.ListUserFollowingsAsync(userId); var specification = new PostFilterSpecification(searchParams); return(await _postRepository.ListAsync <PostViewModel>(specification, PostHelpers.GetPostMapperConfiguration())); }