Created base endpoints for projects and related models

This commit is contained in:
Zanz2 2018-09-11 09:13:17 +02:00
parent 83717e8655
commit 44c3784977
10 changed files with 270 additions and 1 deletions

View file

@ -0,0 +1,82 @@
# frozen_string_literal: true
module Api
module V1
class ActivitiesController < BaseController
before_action :load_team
before_action :load_project
before_action :load_project_activity, only: :project_activity
before_action :load_experiment, except: %i(
project_activities project_activity
)
before_action :load_task, except: %i(project_activities project_activity)
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
def project_activities
activities = @project.activities
.page(params.dig(:page, :number))
.per(params.dig(:page, :size))
render jsonapi: activities,
each_serializer: ActivitySerializer
end
def project_activity
render jsonapi: @project_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
def load_project_activity
@project_activity = @project.activities.find(
params.require(:id)
)
render jsonapi: {}, status: :not_found if @project_activity.nil?
end
end
end
end

View file

@ -0,0 +1,43 @@
# frozen_string_literal: true
module Api
module V1
class ProjectCommentsController < BaseController
before_action :load_team
before_action :load_project
before_action :load_project_comment, only: :show
def index
project_comments = @project.project_comments
.page(params.dig(:page, :number))
.per(params.dig(:page, :size))
render jsonapi: project_comments,
each_serializer: ProjectCommentSerializer
end
def show
render jsonapi: @project_comment, serializer: ProjectCommentSerializer
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_project_comment
@project_comment = @project.project_comments.find(params.require(:id))
render jsonapi: {}, status: :not_found if @project_comment.nil?
end
end
end
end

View file

@ -6,7 +6,6 @@ module Api
before_action :load_team
before_action :load_project, only: :show
def index
projects = @team.projects
.page(params.dig(:page, :number))

View file

@ -0,0 +1,42 @@
# frozen_string_literal: true
module Api
module V1
class ReportsController < BaseController
before_action :load_team
before_action :load_project
before_action :load_report, only: :show
def index
reports = @project.reports
.page(params.dig(:page, :number))
.per(params.dig(:page, :size))
render jsonapi: reports, each_serializer: ReportSerializer
end
def show
render jsonapi: @report, serializer: ReportSerializer
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_report
@report = @project.reports.find(params.require(:id))
render jsonapi: {}, status: :not_found if @report.nil?
end
end
end
end

View file

@ -0,0 +1,42 @@
# frozen_string_literal: true
module Api
module V1
class UserProjectsController < BaseController
before_action :load_team
before_action :load_project
before_action :load_user_project, only: :show
def index
user_projects = @project.user_projects
.page(params.dig(:page, :number))
.per(params.dig(:page, :size))
render jsonapi: user_projects, each_serializer: UserProjectSerializer
end
def show
render jsonapi: @user_project, serializer: UserProjectSerializer
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_user_project
@user_project = @project.user_projects.find(params.require(:id))
render jsonapi: {}, status: :not_found if @user_project.nil?
end
end
end
end

View file

@ -0,0 +1,14 @@
# 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, optional: true
belongs_to :experiment, serializer: ExperimentSerializer, optional: true
belongs_to :project, serializer: ProjectSerializer
end
end
end

View file

@ -0,0 +1,13 @@
# frozen_string_literal: true
module Api
module V1
class ProjectCommentSerializer < ActiveModel::Serializer
type :project_comments
attributes :id, :message, :user_id, :created_at, :updated_at,
:last_modified_by_id, :type, :associated_id
belongs_to :project, serializer: ProjectSerializer
end
end
end

View file

@ -0,0 +1,13 @@
# frozen_string_literal: true
module Api
module V1
class ReportSerializer < ActiveModel::Serializer
type :reports
attributes :id, :name, :description, :project_id, :user_id, :created_at,
:updated_at, :last_modified_by_id, :team_id
belongs_to :project, serializer: ProjectSerializer
end
end
end

View file

@ -0,0 +1,13 @@
# frozen_string_literal: true
module Api
module V1
class UserProjectSerializer < ActiveModel::Serializer
type :user_projects
attributes :id, :role, :user_id, :project_id, :created_at, :updated_at,
:assigned_by_id
belongs_to :project, serializer: ProjectSerializer
end
end
end

View file

@ -556,6 +556,14 @@ Rails.application.routes.draw do
end
resources :projects, only: %i(index show), path: 'projects',
as: :projects do
resources :user_projects, only: %i(index show),
path: 'user_projects', as: :user_projects
resources :project_comments, only: %i(index show),
path: 'project_comments', as: :project_comments
resources :reports, only: %i(index show),
path: 'reports', as: :reports
get 'activities', to: 'activities#project_activities'
get 'activities/:id', to: 'activities#project_activity'
resources :experiments, only: %i(index show) do
resources :my_modules,
only: %i(index show),