mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-04 04:04:36 +08:00
Refactor JSON API mime type registration [SCI-2687]
This commit is contained in:
parent
490376513b
commit
5488fc66fc
8 changed files with 18 additions and 14 deletions
|
@ -5,12 +5,12 @@ module Api
|
||||||
class BaseController < ApiController
|
class BaseController < ApiController
|
||||||
rescue_from ActionController::ParameterMissing do |e|
|
rescue_from ActionController::ParameterMissing do |e|
|
||||||
logger.error e.message
|
logger.error e.message
|
||||||
render json: {}, status: :bad_request
|
render jsonapi: {}, status: :bad_request
|
||||||
end
|
end
|
||||||
|
|
||||||
rescue_from ActiveRecord::RecordNotFound do |e|
|
rescue_from ActiveRecord::RecordNotFound do |e|
|
||||||
logger.error e.message
|
logger.error e.message
|
||||||
render json: {}, status: :not_found
|
render jsonapi: {}, status: :not_found
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -9,18 +9,18 @@ module Api
|
||||||
def index
|
def index
|
||||||
inventories =
|
inventories =
|
||||||
@team.repositories.page(params[:page]).per(params[:page_size])
|
@team.repositories.page(params[:page]).per(params[:page_size])
|
||||||
render json: inventories, each_serializer: InventorySerializer
|
render jsonapi: inventories, each_serializer: InventorySerializer
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
render json: @inventory, serializer: InventorySerializer
|
render jsonapi: @inventory, serializer: InventorySerializer
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def load_team
|
def load_team
|
||||||
@team = Team.find(params.require(:team_id))
|
@team = Team.find(params.require(:team_id))
|
||||||
return render json: {}, status: :forbidden unless can_read_team?(@team)
|
return render jsonapi: {}, status: :forbidden unless can_read_team?(@team)
|
||||||
end
|
end
|
||||||
|
|
||||||
def load_inventory
|
def load_inventory
|
||||||
|
|
|
@ -15,7 +15,7 @@ module Api
|
||||||
repository_cells: Extends::REPOSITORY_SEARCH_INCLUDES
|
repository_cells: Extends::REPOSITORY_SEARCH_INCLUDES
|
||||||
).page(params.dig(:page, :number))
|
).page(params.dig(:page, :number))
|
||||||
.per(params.dig(:page, :size))
|
.per(params.dig(:page, :size))
|
||||||
render json: items,
|
render jsonapi: items,
|
||||||
each_serializer: InventoryItemSerializer,
|
each_serializer: InventoryItemSerializer,
|
||||||
include: :inventory_cells
|
include: :inventory_cells
|
||||||
end
|
end
|
||||||
|
@ -43,7 +43,7 @@ module Api
|
||||||
else
|
else
|
||||||
item = @inventory.repository_rows.create!(attributes)
|
item = @inventory.repository_rows.create!(attributes)
|
||||||
end
|
end
|
||||||
render json: item,
|
render jsonapi: item,
|
||||||
serializer: InventoryItemSerializer,
|
serializer: InventoryItemSerializer,
|
||||||
include: :inventory_cells,
|
include: :inventory_cells,
|
||||||
status: :created
|
status: :created
|
||||||
|
@ -53,7 +53,7 @@ module Api
|
||||||
|
|
||||||
def load_team
|
def load_team
|
||||||
@team = Team.find(params.require(:team_id))
|
@team = Team.find(params.require(:team_id))
|
||||||
return render json: {}, status: :forbidden unless can_read_team?(@team)
|
return render jsonapi: {}, status: :forbidden unless can_read_team?(@team)
|
||||||
end
|
end
|
||||||
|
|
||||||
def load_inventory
|
def load_inventory
|
||||||
|
|
|
@ -5,18 +5,18 @@ module Api
|
||||||
|
|
||||||
def index
|
def index
|
||||||
teams = current_user.teams.page(params[:page]).per(params[:page_size])
|
teams = current_user.teams.page(params[:page]).per(params[:page_size])
|
||||||
render json: teams, each_serializer: TeamSerializer
|
render jsonapi: teams, each_serializer: TeamSerializer
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
render json: @team, serializer: TeamSerializer
|
render jsonapi: @team, serializer: TeamSerializer
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def load_team
|
def load_team
|
||||||
@team = Team.find(params.require(:id))
|
@team = Team.find(params.require(:id))
|
||||||
return render json: {}, status: :forbidden unless can_read_team?(@team)
|
return render jsonapi: {}, status: :forbidden unless can_read_team?(@team)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
# frozen_string_literal: true
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require 'active_model_serializers/register_jsonapi_renderer'
|
||||||
|
|
||||||
ActiveModelSerializers.config.adapter = :json_api
|
ActiveModelSerializers.config.adapter = :json_api
|
||||||
ActiveModelSerializers.config.key_transform = :unaltered
|
ActiveModelSerializers.config.key_transform = :unaltered
|
||||||
|
|
|
@ -2,4 +2,3 @@
|
||||||
|
|
||||||
# Add new mime types for use in respond_to blocks:
|
# Add new mime types for use in respond_to blocks:
|
||||||
# Mime::Type.register "text/richtext", :rtf
|
# Mime::Type.register "text/richtext", :rtf
|
||||||
Mime::Type.register 'application/vnd.api+json', :json
|
|
||||||
|
|
|
@ -545,7 +545,10 @@ Rails.application.routes.draw do
|
||||||
resources :teams, only: %i(index show) do
|
resources :teams, only: %i(index show) do
|
||||||
resources :inventories, only: %i(index show) do
|
resources :inventories, only: %i(index show) do
|
||||||
get 'columns', to: 'inventory_columns#index'
|
get 'columns', to: 'inventory_columns#index'
|
||||||
resources :inventory_items, only: %i(index create), path: 'items'
|
resources :inventory_items,
|
||||||
|
only: %i(index create),
|
||||||
|
path: 'items',
|
||||||
|
as: :items
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
resources :users, only: %i(show) do
|
resources :users, only: %i(show) do
|
||||||
|
|
|
@ -75,7 +75,7 @@ RSpec.describe 'Api::V1::InventoryItemsController', type: :request do
|
||||||
get api_v1_team_inventory_items_path(
|
get api_v1_team_inventory_items_path(
|
||||||
team_id: @teams.first.id,
|
team_id: @teams.first.id,
|
||||||
inventory_id: @teams.first.repositories.first.id
|
inventory_id: @teams.first.repositories.first.id
|
||||||
), params: { page_size: 100 }, headers: @valid_headers
|
), params: { page: { size: 100 } }, headers: @valid_headers
|
||||||
expect { hash_body = json }.not_to raise_exception
|
expect { hash_body = json }.not_to raise_exception
|
||||||
expect(hash_body[:data]).to match(
|
expect(hash_body[:data]).to match(
|
||||||
ActiveModelSerializers::SerializableResource
|
ActiveModelSerializers::SerializableResource
|
||||||
|
|
Loading…
Add table
Reference in a new issue