chore: Add articles metadata (#5125)
This commit is contained in:
parent
7f48cffeb3
commit
41df70fb96
19 changed files with 74 additions and 15 deletions
|
@ -2,10 +2,11 @@ class Api::V1::Accounts::ArticlesController < Api::V1::Accounts::BaseController
|
|||
before_action :portal
|
||||
before_action :check_authorization
|
||||
before_action :fetch_article, except: [:index, :create]
|
||||
before_action :set_current_page, only: [:index]
|
||||
|
||||
def index
|
||||
@articles = @portal.articles
|
||||
@articles = @articles.search(list_params) if params[:payload].present?
|
||||
@articles = @articles.search(list_params) if list_params.present?
|
||||
end
|
||||
|
||||
def create
|
||||
|
@ -45,8 +46,10 @@ class Api::V1::Accounts::ArticlesController < Api::V1::Accounts::BaseController
|
|||
end
|
||||
|
||||
def list_params
|
||||
params.require(:payload).permit(
|
||||
:category_slug, :locale, :query, :page
|
||||
)
|
||||
params.permit(:locale, :query, :page, :category_slug)
|
||||
end
|
||||
|
||||
def set_current_page
|
||||
@current_page = params[:page] || 1
|
||||
end
|
||||
end
|
||||
|
|
|
@ -2,6 +2,7 @@ class Api::V1::Accounts::CategoriesController < Api::V1::Accounts::BaseControlle
|
|||
before_action :portal
|
||||
before_action :check_authorization
|
||||
before_action :fetch_category, except: [:index, :create]
|
||||
before_action :set_current_page, only: [:index]
|
||||
|
||||
def index
|
||||
@categories = @portal.categories.search(params)
|
||||
|
@ -49,4 +50,8 @@ class Api::V1::Accounts::CategoriesController < Api::V1::Accounts::BaseControlle
|
|||
:name, :description, :position, :slug, :locale, :parent_category_id, :associated_category_id
|
||||
)
|
||||
end
|
||||
|
||||
def set_current_page
|
||||
@current_page = params[:page] || 1
|
||||
end
|
||||
end
|
||||
|
|
|
@ -3,6 +3,7 @@ class Api::V1::Accounts::PortalsController < Api::V1::Accounts::BaseController
|
|||
|
||||
before_action :fetch_portal, except: [:index, :create]
|
||||
before_action :check_authorization
|
||||
before_action :set_current_page, only: [:index]
|
||||
|
||||
def index
|
||||
@portals = Current.account.portals
|
||||
|
@ -66,4 +67,8 @@ class Api::V1::Accounts::PortalsController < Api::V1::Accounts::BaseController
|
|||
def portal_member_params
|
||||
params.require(:portal).permit(:account_id, member_ids: [])
|
||||
end
|
||||
|
||||
def set_current_page
|
||||
@current_page = params[:page] || 1
|
||||
end
|
||||
end
|
||||
|
|
|
@ -4,7 +4,7 @@ class Public::Api::V1::Portals::ArticlesController < ApplicationController
|
|||
|
||||
def index
|
||||
@articles = @portal.articles
|
||||
@articles = @articles.search(list_params) if params[:payload].present?
|
||||
@articles = @articles.search(list_params) if list_params.present?
|
||||
end
|
||||
|
||||
def show; end
|
||||
|
@ -20,6 +20,6 @@ class Public::Api::V1::Portals::ArticlesController < ApplicationController
|
|||
end
|
||||
|
||||
def list_params
|
||||
params.require(:payload).permit(:query)
|
||||
params.permit(:query)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -46,7 +46,7 @@ class Portal < ApplicationRecord
|
|||
|
||||
scope :active, -> { where(archived: false) }
|
||||
|
||||
CONFIG_JSON_KEYS = %w[allowed_locales].freeze
|
||||
CONFIG_JSON_KEYS = %w[allowed_locales default_locale].freeze
|
||||
|
||||
def file_base_data
|
||||
{
|
||||
|
@ -60,9 +60,14 @@ class Portal < ApplicationRecord
|
|||
}
|
||||
end
|
||||
|
||||
def default_locale
|
||||
config['default_locale'] || 'en'
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def config_json_format
|
||||
config['default_locale'] = 'en'
|
||||
denied_keys = config.keys - CONFIG_JSON_KEYS
|
||||
errors.add(:cofig, "in portal on #{denied_keys.join(',')} is not supported.") if denied_keys.any?
|
||||
end
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
json.payload do
|
||||
json.array! @articles, partial: 'article', as: :article
|
||||
end
|
||||
|
||||
json.meta do
|
||||
json.current_page @current_page
|
||||
json.articles_count @articles.size
|
||||
end
|
||||
|
|
|
@ -26,4 +26,6 @@ if category.root_category.present?
|
|||
end
|
||||
end
|
||||
|
||||
json.articles_count category.articles.published.try(:count)
|
||||
json.meta do
|
||||
json.articles_count category.articles.size
|
||||
end
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
json.payload do
|
||||
json.array! @categories, partial: 'category', as: :category
|
||||
end
|
||||
|
||||
json.meta do
|
||||
json.current_page @current_page
|
||||
json.categories_count @categories.size
|
||||
end
|
||||
|
|
|
@ -17,3 +17,9 @@ json.portal_members do
|
|||
end
|
||||
end
|
||||
end
|
||||
|
||||
json.meta do
|
||||
json.articles_count portal.articles.size
|
||||
json.categories_count portal.categories.size
|
||||
json.default_locale portal.default_locale
|
||||
end
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
json.payload do
|
||||
json.array! @portals, partial: 'portal', as: :portal
|
||||
end
|
||||
|
||||
json.meta do
|
||||
json.current_page @current_page
|
||||
json.portals_count @portals.size
|
||||
end
|
||||
|
|
|
@ -24,4 +24,6 @@ if category.root_category.present?
|
|||
end
|
||||
end
|
||||
|
||||
json.articles_count category.articles.published.try(:count)
|
||||
json.meta do
|
||||
json.articles_count category.articles.published.size
|
||||
end
|
||||
|
|
|
@ -8,7 +8,13 @@ json.slug portal.slug
|
|||
json.categories do
|
||||
if portal.categories.any?
|
||||
json.array! portal.categories.each do |category|
|
||||
json.partial! 'categories/category.json.jbuilder', category: category
|
||||
json.partial! 'api/v1/models/category.json.jbuilder', category: category
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
json.meta do
|
||||
json.articles_count portal.articles.published.size
|
||||
json.categories_count portal.categories.size
|
||||
json.default_locale portal.default_locale
|
||||
end
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
json.payload do
|
||||
json.array! @articles, partial: 'public/api/v1/models/article.json.jbuilder', as: :article
|
||||
end
|
||||
|
||||
json.meta do
|
||||
json.articles_count @articles.published.size
|
||||
end
|
||||
|
|
|
@ -157,7 +157,7 @@ RSpec.describe 'Api::V1::Accounts::Articles', type: :request do
|
|||
|
||||
get "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/articles",
|
||||
headers: agent.create_new_auth_token,
|
||||
params: { payload: {} }
|
||||
params: {}
|
||||
expect(response).to have_http_status(:success)
|
||||
json_response = JSON.parse(response.body)
|
||||
expect(json_response['payload'].count).to be 2
|
||||
|
@ -169,7 +169,7 @@ RSpec.describe 'Api::V1::Accounts::Articles', type: :request do
|
|||
|
||||
get "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/articles",
|
||||
headers: agent.create_new_auth_token,
|
||||
params: { payload: { category_slug: category.slug } }
|
||||
params: { category_slug: category.slug }
|
||||
expect(response).to have_http_status(:success)
|
||||
json_response = JSON.parse(response.body)
|
||||
expect(json_response['payload'].count).to be 2
|
||||
|
@ -186,10 +186,11 @@ RSpec.describe 'Api::V1::Accounts::Articles', type: :request do
|
|||
|
||||
get "/api/v1/accounts/#{account.id}/portals/#{portal.slug}/articles",
|
||||
headers: agent.create_new_auth_token,
|
||||
params: { payload: { query: 'funny' } }
|
||||
params: { query: 'funny' }
|
||||
expect(response).to have_http_status(:success)
|
||||
json_response = JSON.parse(response.body)
|
||||
expect(json_response['payload'].count).to be 1
|
||||
expect(json_response['meta']['articles_count']).to be json_response['payload'].size
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -115,7 +115,7 @@ RSpec.describe 'Api::V1::Accounts::Portals', type: :request do
|
|||
expect(response).to have_http_status(:success)
|
||||
json_response = JSON.parse(response.body)
|
||||
expect(json_response['name']).to eql(portal_params[:portal][:name])
|
||||
expect(json_response['config']).to eql({ 'allowed_locales' => %w[en es] })
|
||||
expect(json_response['config']).to eql({ 'allowed_locales' => %w[en es], 'default_locale' => 'en' })
|
||||
end
|
||||
|
||||
it 'archive portal' do
|
||||
|
|
|
@ -23,6 +23,7 @@ RSpec.describe 'Public Articles API', type: :request do
|
|||
json_response = JSON.parse(response.body)
|
||||
|
||||
expect(json_response['payload'].length).to eql portal.articles.count
|
||||
expect(json_response['meta']['articles_count']).to be json_response['payload'].size
|
||||
end
|
||||
|
||||
it 'get all articles with searched text query' do
|
||||
|
@ -36,10 +37,11 @@ RSpec.describe 'Public Articles API', type: :request do
|
|||
|
||||
get "/public/api/v1/portals/#{portal.slug}/articles",
|
||||
headers: agent.create_new_auth_token,
|
||||
params: { payload: { query: 'funny' } }
|
||||
params: { query: 'funny' }
|
||||
expect(response).to have_http_status(:success)
|
||||
json_response = JSON.parse(response.body)
|
||||
expect(json_response['payload'].count).to be 1
|
||||
expect(json_response['meta']['articles_count']).to be json_response['payload'].size
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -31,6 +31,7 @@ RSpec.describe 'Public Categories API', type: :request do
|
|||
json_response = JSON.parse(response.body)
|
||||
|
||||
expect(json_response['slug']).to eql category_slug
|
||||
expect(json_response['meta']['articles_count']).to be 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -16,6 +16,7 @@ RSpec.describe 'Public Portals API', type: :request do
|
|||
expect(response).to have_http_status(:success)
|
||||
json_response = JSON.parse(response.body)
|
||||
expect(json_response['slug']).to eql 'test-portal'
|
||||
expect(json_response['meta']['articles_count']).to be 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -24,6 +24,7 @@ RSpec.describe Portal, type: :model do
|
|||
it 'Adds default allowed_locales en' do
|
||||
expect(portal.config).to be_present
|
||||
expect(portal.config['allowed_locales']).to eq(['en'])
|
||||
expect(portal.config['default_locale']).to eq('en')
|
||||
end
|
||||
|
||||
it 'Does not allow any other config than allowed_locales' do
|
||||
|
|
Loading…
Reference in a new issue