From f56e5b1e5aaa8b9b3a2f7ee6c20abab3824c3df3 Mon Sep 17 00:00:00 2001 From: Luka Murn Date: Sun, 7 Oct 2018 10:07:37 +0200 Subject: [PATCH] Update GET /task/:task_id/items, GET /task/:task_id/items/:id endpts --- .../my_module_repository_rows_controller.rb | 59 ---------------- .../api/v1/task_inventory_items_controller.rb | 68 +++++++++++++++++++ app/controllers/api/v1/tasks_controller.rb | 14 ++-- .../api/v1/inventory_item_serializer.rb | 4 ++ .../v1/my_module_repository_row_serializer.rb | 12 ---- config/routes.rb | 6 +- 6 files changed, 82 insertions(+), 81 deletions(-) delete mode 100644 app/controllers/api/v1/my_module_repository_rows_controller.rb create mode 100644 app/controllers/api/v1/task_inventory_items_controller.rb delete mode 100644 app/serializers/api/v1/my_module_repository_row_serializer.rb diff --git a/app/controllers/api/v1/my_module_repository_rows_controller.rb b/app/controllers/api/v1/my_module_repository_rows_controller.rb deleted file mode 100644 index cdb2317ea..000000000 --- a/app/controllers/api/v1/my_module_repository_rows_controller.rb +++ /dev/null @@ -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 diff --git a/app/controllers/api/v1/task_inventory_items_controller.rb b/app/controllers/api/v1/task_inventory_items_controller.rb new file mode 100644 index 000000000..ab28c6996 --- /dev/null +++ b/app/controllers/api/v1/task_inventory_items_controller.rb @@ -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 diff --git a/app/controllers/api/v1/tasks_controller.rb b/app/controllers/api/v1/tasks_controller.rb index 710fa8684..f4e271fa0 100644 --- a/app/controllers/api/v1/tasks_controller.rb +++ b/app/controllers/api/v1/tasks_controller.rb @@ -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 diff --git a/app/serializers/api/v1/inventory_item_serializer.rb b/app/serializers/api/v1/inventory_item_serializer.rb index e980096fb..37d3db1f2 100644 --- a/app/serializers/api/v1/inventory_item_serializer.rb +++ b/app/serializers/api/v1/inventory_item_serializer.rb @@ -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 diff --git a/app/serializers/api/v1/my_module_repository_row_serializer.rb b/app/serializers/api/v1/my_module_repository_row_serializer.rb deleted file mode 100644 index 4b543d012..000000000 --- a/app/serializers/api/v1/my_module_repository_row_serializer.rb +++ /dev/null @@ -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 diff --git a/config/routes.rb b/config/routes.rb index a7dbee906..e04963770 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -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