chore: Add articles metadata (#5125)

This commit is contained in:
Tejaswini Chile 2022-07-28 13:59:16 +05:30 committed by GitHub
parent 7f48cffeb3
commit 41df70fb96
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
19 changed files with 74 additions and 15 deletions

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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