public async Task <Page <NewsPost> > GetPage(GetNewsListBinding binding)
        {
            var newsQuery = _context.NewsPosts
                            .AsNoTracking()
                            .Where(o => o.IsArchived != true);

            if (!string.IsNullOrEmpty(binding.TitleFilter))
            {
                newsQuery = newsQuery.Where(o => o.Title.Contains(binding.TitleFilter));
            }

            #region Date filters

            if (binding.StartDate != null && binding.EndDate != null)
            {
                newsQuery = newsQuery.Where(o => o.CreateDate >= binding.StartDate && o.CreateDate <= binding.EndDate);
            }

            #endregion

            if (binding.Type.ToString() == NewsTypeBinding.All.ToString())
            {
                newsQuery = newsQuery.OrderByDescending(o => o.CreateDate);

                var items = await newsQuery
                            .Skip(binding.Offset)
                            .Take(binding.Limit)
                            .ToListAsync();

                return(new Page <NewsPost>
                {
                    Limit = binding.Limit,
                    Offset = binding.Offset,
                    Total = await newsQuery.CountAsync(),
                    Items = items
                });
            }
            else
            {
                var type = Enum.Parse <NationalProjectType>(binding.Type.ToString());

                newsQuery = newsQuery
                            .Where(o => o.Type == type)
                            .OrderByDescending(o => o.CreateDate);

                var items = await newsQuery
                            .Skip(binding.Offset)
                            .Take(binding.Limit)
                            .ToListAsync();

                return(new Page <NewsPost>
                {
                    Limit = binding.Limit,
                    Offset = binding.Offset,
                    Total = await newsQuery.CountAsync(),
                    Items = items
                });
            }
        }
 public async Task <ActionResult <Page <NewsPost> > > GetNewsPosts(
     [FromQuery] GetNewsListBinding binding,
     CancellationToken cancellationToken)
 {
     return(await(new NewsQueryHandler(_context).GetPage(binding)));
 }