diff --git a/app/controllers/api/v1/activities_controller.rb b/app/controllers/api/v1/activities_controller.rb new file mode 100644 index 000000000..125c44c86 --- /dev/null +++ b/app/controllers/api/v1/activities_controller.rb @@ -0,0 +1,59 @@ +# frozen_string_literal: true + +module Api + module V1 + class ActivitiesController < BaseController + before_action :load_team + before_action :load_project + before_action :load_experiment + before_action :load_task + before_action :load_activity, only: :show + + def index + activities = @my_module.activities + .page(params.dig(:page, :number)) + .per(params.dig(:page, :size)) + + render jsonapi: activities, + each_serializer: ActivitySerializer + end + + def show + render jsonapi: @activity, serializer: ActivitySerializer + 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_activity + @activity = @my_module.activities.find( + params.require(:id) + ) + render jsonapi: {}, status: :not_found if @activity.nil? + end + end + end +end diff --git a/app/controllers/api/v1/my_module_repository_rows_controller.rb b/app/controllers/api/v1/my_module_repository_rows_controller.rb new file mode 100644 index 000000000..cdb2317ea --- /dev/null +++ b/app/controllers/api/v1/my_module_repository_rows_controller.rb @@ -0,0 +1,59 @@ +# 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/my_module_tags_controller.rb b/app/controllers/api/v1/my_module_tags_controller.rb new file mode 100644 index 000000000..1d2ce6cab --- /dev/null +++ b/app/controllers/api/v1/my_module_tags_controller.rb @@ -0,0 +1,59 @@ +# frozen_string_literal: true + +module Api + module V1 + class MyModuleTagsController < 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 + task_tags = @my_module.my_module_tags + .page(params.dig(:page, :number)) + .per(params.dig(:page, :size)) + + render jsonapi: task_tags, + each_serializer: MyModuleTagSerializer + end + + def show + render jsonapi: @task_tag, serializer: MyModuleTagSerializer + 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 + @task_tag = @my_module.my_module_tags.find( + params.require(:id) + ) + render jsonapi: {}, status: :not_found if @task_tag.nil? + end + end + end +end diff --git a/app/controllers/api/v1/my_modules_antecessors_controller.rb b/app/controllers/api/v1/my_modules_antecessors_controller.rb new file mode 100644 index 000000000..e69de29bb diff --git a/app/controllers/api/v1/protocols_controller.rb b/app/controllers/api/v1/protocols_controller.rb new file mode 100644 index 000000000..13701832f --- /dev/null +++ b/app/controllers/api/v1/protocols_controller.rb @@ -0,0 +1,59 @@ +# frozen_string_literal: true + +module Api + module V1 + class ProtocolsController < BaseController + before_action :load_team + before_action :load_project + before_action :load_experiment + before_action :load_task + before_action :load_protocol, only: :show + + def index + protocols = @my_module.protocols + .page(params.dig(:page, :number)) + .per(params.dig(:page, :size)) + + render jsonapi: protocols, + each_serializer: ProtocolSerializer + end + + def show + render jsonapi: @protocol, serializer: ProtocolSerializer + 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_protocol + @protocol = @my_module.protocols.find( + params.require(:id) + ) + render jsonapi: {}, status: :not_found if @protocol.nil? + end + end + end +end diff --git a/app/controllers/api/v1/results_controller.rb b/app/controllers/api/v1/results_controller.rb new file mode 100644 index 000000000..194116a7c --- /dev/null +++ b/app/controllers/api/v1/results_controller.rb @@ -0,0 +1,59 @@ +# frozen_string_literal: true + +module Api + module V1 + class ResultsController < BaseController + before_action :load_team + before_action :load_project + before_action :load_experiment + before_action :load_task + before_action :load_result, only: :show + + def index + results = @my_module.results + .page(params.dig(:page, :number)) + .per(params.dig(:page, :size)) + + render jsonapi: results, + each_serializer: ResultSerializer + end + + def show + render jsonapi: @result, serializer: ResultSerializer + 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_result + @result = @my_module.results.find( + params.require(:id) + ) + render jsonapi: {}, status: :not_found if @result.nil? + end + end + end +end diff --git a/app/controllers/api/v1/user_my_modules_controller.rb b/app/controllers/api/v1/user_my_modules_controller.rb new file mode 100644 index 000000000..f3a91b9ad --- /dev/null +++ b/app/controllers/api/v1/user_my_modules_controller.rb @@ -0,0 +1,59 @@ +# frozen_string_literal: true + +module Api + module V1 + class UserMyModulesController < BaseController + before_action :load_team + before_action :load_project + before_action :load_experiment + before_action :load_task + before_action :load_user_task, only: :show + + def index + user_tasks = @my_module.user_my_modules + .page(params.dig(:page, :number)) + .per(params.dig(:page, :size)) + + render jsonapi: user_tasks, + each_serializer: UserMyModuleSerializer + end + + def show + render jsonapi: @user_task, serializer: UserMyModuleSerializer + 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_user_task + @user_task = @my_module.user_my_modules.find( + params.require(:id) + ) + render jsonapi: {}, status: :not_found if @user_task.nil? + end + end + end +end diff --git a/app/serializers/api/v1/activity_serializer.rb b/app/serializers/api/v1/activity_serializer.rb new file mode 100644 index 000000000..11dee4dc1 --- /dev/null +++ b/app/serializers/api/v1/activity_serializer.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +module Api + module V1 + class ActivitySerializer < ActiveModel::Serializer + type :activities + attributes :id, :my_module_id, :user_id, :type_of, :message, :created_at, + :updated_at, :project_id, :experiment_id + belongs_to :my_module, serializer: MyModuleSerializer + end + end +end diff --git a/app/serializers/api/v1/my_module_antecessors_serializer.rb b/app/serializers/api/v1/my_module_antecessors_serializer.rb new file mode 100644 index 000000000..e69de29bb diff --git a/app/serializers/api/v1/my_module_repository_row_serializer.rb b/app/serializers/api/v1/my_module_repository_row_serializer.rb new file mode 100644 index 000000000..db89f7515 --- /dev/null +++ b/app/serializers/api/v1/my_module_repository_row_serializer.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +module Api + module V1 + class MyModuleRepositoryRowSerializer < ActiveModel::Serializer + type :task_inventory_rows + attributes :id, :repository_row_id, :my_module_id, :assigned_by_id, + :created_at, :updated_at + belongs_to :my_module, serializer: MyModuleSerializer + end + end +end diff --git a/app/serializers/api/v1/my_module_tag_serializer.rb b/app/serializers/api/v1/my_module_tag_serializer.rb new file mode 100644 index 000000000..d395887e7 --- /dev/null +++ b/app/serializers/api/v1/my_module_tag_serializer.rb @@ -0,0 +1,11 @@ +# frozen_string_literal: true + +module Api + module V1 + class MyModuleTagSerializer < ActiveModel::Serializer + type :task_tags + attributes :id, :my_module_id, :tag_id, :created_by_id + belongs_to :my_module, serializer: MyModuleSerializer + end + end +end diff --git a/app/serializers/api/v1/protocol_serializer.rb b/app/serializers/api/v1/protocol_serializer.rb new file mode 100644 index 000000000..33366de9e --- /dev/null +++ b/app/serializers/api/v1/protocol_serializer.rb @@ -0,0 +1,15 @@ +# frozen_string_literal: true + +module Api + module V1 + class ProtocolSerializer < ActiveModel::Serializer + type :protocols + attributes :id, :name, :authors, :description, :added_by_id, + :my_module_id, :team_id, :protocol_type, :parent_id, + :parent_updated_at, :archived_by_id, :archived_on, + :restored_by_id, :restored_on, :created_at, :updated_at, + :published_on, :nr_of_linked_children + belongs_to :my_module, serializer: MyModuleSerializer + end + end +end diff --git a/app/serializers/api/v1/result_serializer.rb b/app/serializers/api/v1/result_serializer.rb new file mode 100644 index 000000000..b90f9fa7c --- /dev/null +++ b/app/serializers/api/v1/result_serializer.rb @@ -0,0 +1,14 @@ +# frozen_string_literal: true + +module Api + module V1 + class ResultSerializer < ActiveModel::Serializer + type :results + attributes :id, :name, :my_module_id, :user_id, :created_at, :updated_at, + :archived, :archived_on, :last_modified_by_id, :archived_by_id, + :restored_by_id, :restored_on + + belongs_to :my_module, serializer: MyModuleSerializer + end + end +end diff --git a/app/serializers/api/v1/user_my_module_serializer.rb b/app/serializers/api/v1/user_my_module_serializer.rb new file mode 100644 index 000000000..cee99d9f3 --- /dev/null +++ b/app/serializers/api/v1/user_my_module_serializer.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +module Api + module V1 + class UserMyModuleSerializer < ActiveModel::Serializer + type :user_tasks + attributes :id, :user_id, :my_module_id, :created_at, + :updated_at, :assigned_by_id + belongs_to :my_module, serializer: MyModuleSerializer + end + end +end