From 82cca496fdd5fad3d6ee88f3e55f68040e2b47ca Mon Sep 17 00:00:00 2001 From: cyrillefr Date: Thu, 3 Oct 2019 17:26:39 +0200 Subject: [PATCH] Add collection ids to Api (reading + filtering) (#4180) * Add collection ids to Api (reading + filtering) - refactored controller - modifyied views - added tests * Add collection ids to Api (reading + filtering): requested changes - changed order in service - proper test in filtering --- app/controllers/api/v0/articles_controller.rb | 1 + app/services/article_api_index_service.rb | 14 +++++++++++++- app/views/api/v0/articles/index.json.jbuilder | 1 + app/views/api/v0/articles/show.json.jbuilder | 1 + spec/requests/api/v0/articles_spec.rb | 7 +++++++ 5 files changed, 23 insertions(+), 1 deletion(-) diff --git a/app/controllers/api/v0/articles_controller.rb b/app/controllers/api/v0/articles_controller.rb index f7972baa8..f14ae06bf 100644 --- a/app/controllers/api/v0/articles_controller.rb +++ b/app/controllers/api/v0/articles_controller.rb @@ -28,6 +28,7 @@ module Api params[:username], params[:signature], params[:state], + params[:collection_id], ] set_surrogate_key_header key_headers.join("_") end diff --git a/app/services/article_api_index_service.rb b/app/services/article_api_index_service.rb index fac6d50b2..a39e8b0d2 100644 --- a/app/services/article_api_index_service.rb +++ b/app/services/article_api_index_service.rb @@ -1,5 +1,5 @@ class ArticleApiIndexService - attr_accessor :tag, :username, :page, :state, :top + attr_accessor :tag, :username, :page, :state, :top, :collection_id def initialize(params) @page = params[:page] @@ -7,6 +7,7 @@ class ArticleApiIndexService @username = params[:username] @state = params[:state] @top = params[:top] + @collection_id = params[:collection_id] end def get @@ -18,6 +19,8 @@ class ArticleApiIndexService state_articles(state) elsif top.present? top_articles + elsif collection_id.present? + collection_articles(collection_id) else base_articles end @@ -81,6 +84,15 @@ class ArticleApiIndexService end end + def collection_articles(collection_id) + Article.published. + where(collection_id: collection_id). + includes(:user, :organization). + order("published_at"). + page(page). + per(30) + end + def base_articles Article.published. where(featured: true). diff --git a/app/views/api/v0/articles/index.json.jbuilder b/app/views/api/v0/articles/index.json.jbuilder index 2f55d24fa..19e397d68 100644 --- a/app/views/api/v0/articles/index.json.jbuilder +++ b/app/views/api/v0/articles/index.json.jbuilder @@ -13,6 +13,7 @@ json.array! @articles do |article| json.comments_count article.comments_count json.positive_reactions_count article.positive_reactions_count json.published_timestamp article.published_timestamp + json.collection_id article.collection_id json.partial! "api/v0/shared/user", user: article.user diff --git a/app/views/api/v0/articles/show.json.jbuilder b/app/views/api/v0/articles/show.json.jbuilder index a28379b68..a94dda308 100644 --- a/app/views/api/v0/articles/show.json.jbuilder +++ b/app/views/api/v0/articles/show.json.jbuilder @@ -13,6 +13,7 @@ json.url @article.url json.canonical_url @article.processed_canonical_url json.comments_count @article.comments_count json.positive_reactions_count @article.positive_reactions_count +json.collection_id @article.collection_id json.created_at @article.created_at.utc.iso8601 json.edited_at @article.edited_at&.utc&.iso8601 diff --git a/spec/requests/api/v0/articles_spec.rb b/spec/requests/api/v0/articles_spec.rb index a86482ecb..acc3d6715 100644 --- a/spec/requests/api/v0/articles_spec.rb +++ b/spec/requests/api/v0/articles_spec.rb @@ -71,6 +71,13 @@ RSpec.describe "Api::V0::Articles", type: :request do expect(response_article["flare_tag"].keys).to eq(%w[name bg_color_hex text_color_hex]) expect(response_article["flare_tag"]["name"]).to eq("discuss") end + + it "returns a collection id" do + collection = create(:collection, user: article.user) + article.update_columns(collection_id: collection.id) + get api_articles_path(collection_id: collection.id) + expect(json_response[0]["collection_id"]).to eq collection.id + end end describe "GET /api/articles/:id" do