mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-11-13 01:41:09 +08:00
Update GET /task/:task_id/items, GET /task/:task_id/items/:id endpts
This commit is contained in:
parent
0de3c7eb4e
commit
f56e5b1e5a
6 changed files with 82 additions and 81 deletions
|
|
@ -1,59 +0,0 @@
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
module Api
|
|
||||||
module V1
|
|
||||||
class MyModuleRepositoryRowsController < BaseController
|
|
||||||
before_action :load_team
|
|
||||||
before_action :load_project
|
|
||||||
before_action :load_experiment
|
|
||||||
before_action :load_task
|
|
||||||
before_action :load_task_repository_row, only: :show
|
|
||||||
|
|
||||||
def index
|
|
||||||
repo_rows = @my_module.my_module_repository_rows
|
|
||||||
.page(params.dig(:page, :number))
|
|
||||||
.per(params.dig(:page, :size))
|
|
||||||
|
|
||||||
render jsonapi: repo_rows,
|
|
||||||
each_serializer: MyModuleRepositoryRowSerializer
|
|
||||||
end
|
|
||||||
|
|
||||||
def show
|
|
||||||
render jsonapi: @repo_row, serializer: MyModuleRepositoryRowSerializer
|
|
||||||
end
|
|
||||||
|
|
||||||
private
|
|
||||||
|
|
||||||
def load_team
|
|
||||||
@team = Team.find(params.require(:team_id))
|
|
||||||
render jsonapi: {}, status: :forbidden unless can_read_team?(@team)
|
|
||||||
end
|
|
||||||
|
|
||||||
def load_project
|
|
||||||
@project = @team.projects.find(params.require(:project_id))
|
|
||||||
render jsonapi: {}, status: :forbidden unless can_read_project?(
|
|
||||||
@project
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
def load_experiment
|
|
||||||
@experiment = @project.experiments.find(params.require(:experiment_id))
|
|
||||||
render jsonapi: {}, status: :forbidden unless can_read_experiment?(
|
|
||||||
@experiment
|
|
||||||
)
|
|
||||||
end
|
|
||||||
|
|
||||||
def load_task
|
|
||||||
@my_module = @experiment.my_modules.find(params.require(:task_id))
|
|
||||||
render jsonapi: {}, status: :not_found if @my_module.nil?
|
|
||||||
end
|
|
||||||
|
|
||||||
def load_task_repository_row
|
|
||||||
@repo_row = @my_module.my_module_repository_rows.find(
|
|
||||||
params.require(:id)
|
|
||||||
)
|
|
||||||
render jsonapi: {}, status: :not_found if @repo_row.nil?
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
68
app/controllers/api/v1/task_inventory_items_controller.rb
Normal file
68
app/controllers/api/v1/task_inventory_items_controller.rb
Normal file
|
|
@ -0,0 +1,68 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
module Api
|
||||||
|
module V1
|
||||||
|
class TaskInventoryItemsController < BaseController
|
||||||
|
before_action :load_team
|
||||||
|
before_action :load_project
|
||||||
|
before_action :load_experiment
|
||||||
|
before_action :load_task
|
||||||
|
before_action :load_inventory_item, only: :show
|
||||||
|
|
||||||
|
def index
|
||||||
|
items =
|
||||||
|
@task.repository_rows
|
||||||
|
.includes(repository_cells: :repository_column)
|
||||||
|
.includes(
|
||||||
|
repository_cells: Extends::REPOSITORY_SEARCH_INCLUDES
|
||||||
|
).page(params.dig(:page, :number))
|
||||||
|
.per(params.dig(:page, :size))
|
||||||
|
incl = params[:include] == 'inventory_cells' ? :inventory_cells : nil
|
||||||
|
render jsonapi: items,
|
||||||
|
each_serializer: InventoryItemSerializer,
|
||||||
|
show_repository: true,
|
||||||
|
include: incl
|
||||||
|
end
|
||||||
|
|
||||||
|
def show
|
||||||
|
render jsonapi: @item,
|
||||||
|
serializer: InventoryItemSerializer,
|
||||||
|
show_repository: true,
|
||||||
|
include: %i(inventory_cells inventory)
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def load_team
|
||||||
|
@team = Team.find(params.require(:team_id))
|
||||||
|
render jsonapi: {}, status: :forbidden unless can_read_team?(@team)
|
||||||
|
end
|
||||||
|
|
||||||
|
def load_project
|
||||||
|
@project = @team.projects.find(params.require(:project_id))
|
||||||
|
render jsonapi: {}, status: :forbidden unless can_read_project?(
|
||||||
|
@project
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def load_experiment
|
||||||
|
@experiment = @project.experiments.find(params.require(:experiment_id))
|
||||||
|
render jsonapi: {}, status: :forbidden unless can_read_experiment?(
|
||||||
|
@experiment
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
def load_task
|
||||||
|
@task = @experiment.my_modules.find(params.require(:task_id))
|
||||||
|
render jsonapi: {}, status: :not_found if @task.nil?
|
||||||
|
end
|
||||||
|
|
||||||
|
def load_inventory_item
|
||||||
|
@item = @task.repository_rows.find(
|
||||||
|
params.require(:id)
|
||||||
|
)
|
||||||
|
render jsonapi: {}, status: :not_found if @item.nil?
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
@ -18,30 +18,30 @@ module Api
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
render jsonapi: @my_module, serializer: TaskSerializer
|
render jsonapi: @task, serializer: TaskSerializer
|
||||||
end
|
end
|
||||||
|
|
||||||
def outputs
|
def outputs
|
||||||
outputs = @my_module.my_modules
|
outputs = @task.my_modules
|
||||||
.page(params.dig(:page, :number))
|
.page(params.dig(:page, :number))
|
||||||
.per(params.dig(:page, :size))
|
.per(params.dig(:page, :size))
|
||||||
render jsonapi: outputs, each_serializer: TaskSerializer
|
render jsonapi: outputs, each_serializer: TaskSerializer
|
||||||
end
|
end
|
||||||
|
|
||||||
def output
|
def output
|
||||||
output = @my_module.my_modules.find(params.require(:id))
|
output = @task.my_modules.find(params.require(:id))
|
||||||
render jsonapi: output, serializer: TaskSerializer
|
render jsonapi: output, serializer: TaskSerializer
|
||||||
end
|
end
|
||||||
|
|
||||||
def inputs
|
def inputs
|
||||||
inputs = @my_module.my_module_antecessors
|
inputs = @task.my_module_antecessors
|
||||||
.page(params.dig(:page, :number))
|
.page(params.dig(:page, :number))
|
||||||
.per(params.dig(:page, :size))
|
.per(params.dig(:page, :size))
|
||||||
render jsonapi: inputs, each_serializer: TaskSerializer
|
render jsonapi: inputs, each_serializer: TaskSerializer
|
||||||
end
|
end
|
||||||
|
|
||||||
def input
|
def input
|
||||||
input = @my_module.my_module_antecessors.find(params.require(:id))
|
input = @task.my_module_antecessors.find(params.require(:id))
|
||||||
render jsonapi: input, serializer: TaskSerializer
|
render jsonapi: input, serializer: TaskSerializer
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -67,7 +67,7 @@ module Api
|
||||||
end
|
end
|
||||||
|
|
||||||
def load_task
|
def load_task
|
||||||
@my_module = @experiment.my_modules.find(params.require(:id))
|
@task = @experiment.my_modules.find(params.require(:id))
|
||||||
end
|
end
|
||||||
|
|
||||||
# Made the method below because its more elegant than changing parameters
|
# Made the method below because its more elegant than changing parameters
|
||||||
|
|
@ -75,7 +75,7 @@ module Api
|
||||||
# for a task, the "id" that used to be task id is now an id for the output
|
# for a task, the "id" that used to be task id is now an id for the output
|
||||||
# or input.
|
# or input.
|
||||||
def load_task_relative
|
def load_task_relative
|
||||||
@my_module = @experiment.my_modules.find(params.require(:task_id))
|
@task = @experiment.my_modules.find(params.require(:task_id))
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -9,6 +9,10 @@ module Api
|
||||||
serializer: InventoryCellSerializer,
|
serializer: InventoryCellSerializer,
|
||||||
class_name: 'RepositoryCell',
|
class_name: 'RepositoryCell',
|
||||||
unless: -> { object.repository_cells.empty? }
|
unless: -> { object.repository_cells.empty? }
|
||||||
|
belongs_to :repository, key: :inventory,
|
||||||
|
serializer: InventorySerializer,
|
||||||
|
class_name: 'Repository',
|
||||||
|
if: -> { instance_options[:show_repository] }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -1,12 +0,0 @@
|
||||||
# frozen_string_literal: true
|
|
||||||
|
|
||||||
module Api
|
|
||||||
module V1
|
|
||||||
class MyModuleRepositoryRowSerializer < ActiveModel::Serializer
|
|
||||||
type :task_inventory_rows
|
|
||||||
attribute :repository_row_id, key: :inventory_row_id
|
|
||||||
attribute :my_module_id, key: :task_id
|
|
||||||
belongs_to :my_module, serializer: TaskSerializer
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
@ -566,9 +566,9 @@ Rails.application.routes.draw do
|
||||||
resources :task_groups, only: %i(index show)
|
resources :task_groups, only: %i(index show)
|
||||||
resources :connections, only: %i(index show)
|
resources :connections, only: %i(index show)
|
||||||
resources :tasks, only: %i(index show) do
|
resources :tasks, only: %i(index show) do
|
||||||
resources :my_module_repository_rows, only: %i(index show),
|
resources :task_inventory_items, only: %i(index show),
|
||||||
path: 'task_inventory_rows',
|
path: 'items',
|
||||||
as: :task_inventory_rows
|
as: :items
|
||||||
resources :user_my_modules, only: %i(index show),
|
resources :user_my_modules, only: %i(index show),
|
||||||
path: 'user_tasks',
|
path: 'user_tasks',
|
||||||
as: :user_tasks
|
as: :user_tasks
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue