Update GET /task/:task_id/items, GET /task/:task_id/items/:id endpts

This commit is contained in:
Luka Murn 2018-10-07 10:07:37 +02:00
parent 0de3c7eb4e
commit f56e5b1e5a
6 changed files with 82 additions and 81 deletions

View file

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

View 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

View file

@ -18,30 +18,30 @@ module Api
end
def show
render jsonapi: @my_module, serializer: TaskSerializer
render jsonapi: @task, serializer: TaskSerializer
end
def outputs
outputs = @my_module.my_modules
outputs = @task.my_modules
.page(params.dig(:page, :number))
.per(params.dig(:page, :size))
render jsonapi: outputs, each_serializer: TaskSerializer
end
def output
output = @my_module.my_modules.find(params.require(:id))
output = @task.my_modules.find(params.require(:id))
render jsonapi: output, serializer: TaskSerializer
end
def inputs
inputs = @my_module.my_module_antecessors
inputs = @task.my_module_antecessors
.page(params.dig(:page, :number))
.per(params.dig(:page, :size))
render jsonapi: inputs, each_serializer: TaskSerializer
end
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
end
@ -67,7 +67,7 @@ module Api
end
def load_task
@my_module = @experiment.my_modules.find(params.require(:id))
@task = @experiment.my_modules.find(params.require(:id))
end
# 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
# or input.
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

View file

@ -9,6 +9,10 @@ module Api
serializer: InventoryCellSerializer,
class_name: 'RepositoryCell',
unless: -> { object.repository_cells.empty? }
belongs_to :repository, key: :inventory,
serializer: InventorySerializer,
class_name: 'Repository',
if: -> { instance_options[:show_repository] }
end
end
end

View file

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

View file

@ -566,9 +566,9 @@ Rails.application.routes.draw do
resources :task_groups, only: %i(index show)
resources :connections, only: %i(index show)
resources :tasks, only: %i(index show) do
resources :my_module_repository_rows, only: %i(index show),
path: 'task_inventory_rows',
as: :task_inventory_rows
resources :task_inventory_items, only: %i(index show),
path: 'items',
as: :items
resources :user_my_modules, only: %i(index show),
path: 'user_tasks',
as: :user_tasks