예제 #1
0
        public async Task <(IList <BlogPost> posts, int totalPosts)> GetPosts(PostsFilter filter)
        {
            // there are no posts w/o status
            if (!filter.Drafted && !filter.Published && !filter.Removed)
            {
                return(null, 0);
            }

            var query = _context.Posts
                        .AsNoTracking();

            query = QueryPostsByStatus(query, filter.Drafted, filter.Published, filter.Removed);
            query = QueryPostsByAuthorId(query, filter.AuthorId);
            query = QueryPostsBySearchText(query, filter.Search);

            List <Post> posts = null;

            var count = await query.CountAsync();

            if (count != 0)
            {
                var skip = (filter.Page - 1) * filter.PageSize;
                posts = await query
                        .Include(x => x.Author)
                        .OrderBy(x => x.Id)
                        .Skip(skip)
                        .Take(filter.PageSize)
                        .ToListAsync();
            }

            var dtoPosts = posts?.Select(x => Mapper.ConvertToModel(x))?.ToList();

            return(dtoPosts, count);
        }
        /// <summary>
        /// Get more items when filter posts by category
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public PartialViewResult ArchiveGetMore(PostsFilter model)
        {
            ArchiveId id = new ArchiveId(model.Id);

            InitializeArchiveModel(model, id);
            return(PartialView(FilterGetMoreView, model));
        }
예제 #3
0
        public Task <List <Post> > GetPosts(PostsFilter filter)
        {
            if (filter == null)
            {
                throw new ArgumentNullException(nameof(filter));
            }

            return(_postsRepository.GetPosts(filter));
        }
 /// <summary>
 /// Get more items when filter posts by category
 /// </summary>
 /// <param name="model"></param>
 /// <returns></returns>
 public PartialViewResult CategoryGetMore(PostsFilter model)
 {
     // Filters have to share the id
     if (Int32.TryParse(model.Id, out int id))
     {
         InitializeCategorymodel(model, id);
     }
     return(PartialView(FilterGetMoreView, model));
 }
예제 #5
0
        /// <summary>
        /// Get more items when filter posts by category
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public PartialViewResult ArchiveGetMore(PostsFilter model)
        {
            ArchiveId id = new ArchiveId(model.Id);

            using (var db = new DataService())
            {
                InitializeArchiveModel(db, model, id);
            }
            return(PartialView(FilterGetMoreView, model));
        }
            public void GetPosts_ExistingItems_ReturnsPosts(PostsFilter filter, IEnumerable <Post> expected, IEnumerable <Post> data)
            {
                // Arrange
                var repository = new TestSetup().SetupRepository(list: data);

                // Act
                var result = repository.GetPosts(filter).Result;

                // Assert
                CollectionAssert.AreEquivalent(expected, result);
            }
        private static PostsFilter map(PostsFilterModel source)
        {
            var destination = new PostsFilter();

            destination.PageSize  = source.PageSize;
            destination.PageIndex = source.PageNumber - 1;
            destination.StartDate = source.StartDate;
            destination.EndDate   = source.EndDate;

            return(destination);
        }
예제 #8
0
 /// <summary>
 /// Get more items when filter posts by category
 /// </summary>
 /// <param name="model"></param>
 /// <returns></returns>
 public PartialViewResult CategoryGetMore(PostsFilter model)
 {
     // Filters have to share the id
     if (Int32.TryParse(model.Id, out int id))
     {
         using (var db = new DataService())
         {
             InitializeCategorymodel(db, model, id);
         }
     }
     return(PartialView(FilterGetMoreView, model));
 }
예제 #9
0
        private static void InitializeArchiveModel(DataService db, PostsFilter model, ArchiveId id)
        {
            // Archive
            model.Action = "Archive";

            // Gets posts
            model.Items = db.GetPostsInArchive(id, model.Page * Settings.Current.PostQuantityPerSearch);

            // Have more
            Int32 count = db.CounPostsInArchive(id);

            model.Available       = count;
            model.HaveMoreResults = count > (model.Page + 1) * Settings.Current.PostQuantityPerSearch;

            // Update page index
            model.NextPage = model.Page + 1;
        }
예제 #10
0
        public async Task <IActionResult> Posts([FromQuery] PostsFilter filter)
        {
            filter          = filter ?? new PostsFilter();
            filter.AuthorId = filter.Own ? User.GetId() : null as int?;
            filter.Removed  = User.IsAdmin() ? filter.Removed : false;

            var result = await _postsService.GetPosts(filter);

            var postsVM      = result.Elements?.Select(x => (PostViewModel)x)?.ToList() ?? Enumerable.Empty <PostViewModel>();
            var pagedPostsVM = new StaticPagedList <PostViewModel>(postsVM, filter.Page, filter.PageSize, result.TotalElements);

            return(View(new PostsListViewModel
            {
                Filter = filter,
                Posts = pagedPostsVM
            }));
        }
예제 #11
0
        private void InitializeArchiveModel(PostsFilter model, ArchiveId id)
        {
            // Archive
            model.Action = "Archive";

            // Gets posts
            model.Items = _dataService.GetPostsInArchive(id, model.Page * _options.Value.PostQuantityPerSearch);

            // Have more
            Int32 count = _dataService.CounPostsInArchive(id);

            model.Available       = count;
            model.HaveMoreResults = count > (model.Page + 1) * _options.Value.PostQuantityPerSearch;

            // Update page index
            model.NextPage = model.Page + 1;
        }
예제 #12
0
        /// <summary>
        /// Filter post by category
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public ActionResult Archive(PostsFilter model)
        {
            ArchiveId id = new ArchiveId(model.Id);

            // Title
            model.Title = Resources.Archives;

            // Get name
            model.SubTitle    = id.ToString();
            model.Description = String.Format(
                Resources.ArchivesDescription,
                model.SubTitle);

            // Initialize the data
            InitializeArchiveModel(model, id);

            return(View(FilterView, model));
        }
예제 #13
0
        /// <summary>
        /// Filter post by category
        /// </summary>
        /// <param name="model"></param>
        /// <returns></returns>
        public ActionResult Category(PostsFilter model)
        {
            // Filters have to share the id
            if (Int32.TryParse(model.Id, out int id))
            {
                // Title
                model.Title = Resources.Category;

                // Get name
                model.SubTitle    = _dataService.GetCategoryName(id);
                model.Description = String.Format(
                    Resources.CategoryDescription,
                    model.SubTitle);

                // Initialize the data
                InitializeCategorymodel(model, id);
            }
            return(View(FilterView, model));
        }
예제 #14
0
        public Task <List <Post> > GetPosts(PostsFilter filter)
        {
            IEnumerable <Post> result = _storage;

            if (filter.StartDate.HasValue)
            {
                result = result.Where(p => p.CreationDate >= filter.StartDate.Value);
            }

            if (filter.EndDate.HasValue)
            {
                result = result.Where(p => p.CreationDate <= filter.EndDate.Value);
            }

            result = result
                     .OrderByDescending(p => p.CreationDate)
                     .Skip(filter.PageSize * filter.PageIndex)
                     .Take(filter.PageSize);

            return(Task.FromResult(result.ToList()));
        }
예제 #15
0
 public Task <(IList <BlogPost> posts, int totalPosts)> GetPosts(PostsFilter filter)
 {
     return(_postRepository.GetPosts(filter));
 }
예제 #16
0
        public async Task <PagedResult <BlogPost> > GetPosts(PostsFilter filter)
        {
            var(posts, totalPosts) = await _postRepository.GetPosts(filter);

            return(new PagedResult <BlogPost>(posts, totalPosts));
        }