protected async Task <int> GetTotalPages( ArticlesQuery request, bool onlyAvailable = true, int?journalistId = default, CancellationToken cancellationToken = default) { var articleSpecification = this.GetArticleSpecification(request, onlyAvailable); var journalistSpecification = this.GetJournalistSpecification(request, journalistId); var totalArticles = await this.articleRepository.Total( articleSpecification, journalistSpecification, cancellationToken); return((int)Math.Ceiling((double)totalArticles / ArticlesPerPage)); }
protected async Task <IEnumerable <TOutputModel> > GetArticleListings <TOutputModel>( ArticlesQuery request, bool onlyAvailable = true, int?journalistId = default, CancellationToken cancellationToken = default) { var articleSpecification = this.GetArticleSpecification(request, onlyAvailable); var journalistSpecification = this.GetJournalistSpecification(request, journalistId); var searchOrder = new ArticlesSortOrder(request.SortBy, request.Order); var skip = (request.Page - 1) * ArticlesPerPage; return(await this.articleRepository.GetArticleListings <TOutputModel>( articleSpecification, journalistSpecification, searchOrder, skip, take : ArticlesPerPage, cancellationToken)); }
private Specification <Journalist> GetJournalistSpecification(ArticlesQuery request, int?journalistId) => new JournalistByIdSpecification(journalistId) .And(new JournalistByNickNameSpecification(request.Journalist));
private Specification <Article> GetArticleSpecification(ArticlesQuery request, bool onlyAvailable) => new ArticleByCategorySpecification(request.Category) .And(new ArticleOnlyAvailableSpecification(onlyAvailable));