public async Task <PagedDto <StoryDto> > HandleAsync(BrowseStories query)
        {
            var now       = query.Now.ToUnixTimeMilliseconds();
            var documents = _database.GetCollection <StoryDocument>("stories")
                            .AsQueryable()
                            .Where(x => x.From <= now && x.To >= now);

            var input = query.Query;

            if (!string.IsNullOrWhiteSpace(input))
            {
                documents = documents.Where(x =>
                                            x.Title.Contains(input) || x.Author.Name.Contains(input) || x.Tags.Contains(input));
            }

            var result = await documents.OrderByDescending(x => x.CreatedAt).PaginateAsync(query);

            var storyIds = result.Items.Select(x => x.Id);

            var rates = await _database.GetCollection <StoryRatingDocument>("ratings")
                        .AsQueryable()
                        .Where(x => storyIds.Contains(x.StoryId))
                        .ToListAsync();

            var pagedResult = PagedResult <StoryDto> .From(result, result.Items.Select(x => x.ToDto(rates)));

            return(new PagedDto <StoryDto>
            {
                CurrentPage = pagedResult.CurrentPage,
                TotalPages = pagedResult.TotalPages,
                ResultsPerPage = pagedResult.ResultsPerPage,
                TotalResults = pagedResult.TotalResults,
                Items = pagedResult.Items
            });
        }
Esempio n. 2
0
        public async Task <IEnumerable <Story> > BrowseAsync(BrowseStories query)
        {
            var stories = _collection.AsQueryable();

            if (!string.IsNullOrWhiteSpace(query.Author))
            {
                stories = stories.Where(x => x.Author == query.Author);
            }

            if (!string.IsNullOrWhiteSpace(query.Title))
            {
                stories = stories.Where(x => x.Title.Contains(query.Title));
            }

            return(await stories.ToListAsync());
        }
Esempio n. 3
0
        public async Task <IEnumerable <StoryDto> > BrowseAsync(BrowseStories request)
        {
            Expression <Func <Story, bool> > query = story =>
                                                     (request.Author == null || story.Author.Name == request.Author) &&
                                                     (request.Title == null || story.Title.Contains(request.Title ?? string.Empty)) &&
                                                     (request.Text == null || story.Text.Value.Contains(request.Text ?? string.Empty));

            var stories = await _storyRepository.BrowseAsync(query);

            return(stories.Select(x => new StoryDto
            {
                Id = x.Id,
                Author = x.Author,
                Title = x.Title,
                Tags = x.Tags ?? Enumerable.Empty <string>(),
                CreatedAt = x.CreatedAt
            }));
        }
Esempio n. 4
0
 public async Task <ActionResult <IEnumerable <Story> > > Get([FromQuery] BrowseStories query)
 => Ok(await _storyService.BrowseAsync(query));
Esempio n. 5
0
 public async Task <IEnumerable <Story> > BrowseAsync(BrowseStories query)
 {
     return(await _storyRepository.BrowseAsync(query));
 }