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 }); }
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()); }
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 })); }
public async Task <ActionResult <IEnumerable <Story> > > Get([FromQuery] BrowseStories query) => Ok(await _storyService.BrowseAsync(query));
public async Task <IEnumerable <Story> > BrowseAsync(BrowseStories query) { return(await _storyRepository.BrowseAsync(query)); }