mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-03-12 15:57:45 +08:00
Created base endpoints for projects and related models
This commit is contained in:
parent
83717e8655
commit
44c3784977
10 changed files with 270 additions and 1 deletions
82
app/controllers/api/v1/activities_controller.rb
Normal file
82
app/controllers/api/v1/activities_controller.rb
Normal 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
|
43
app/controllers/api/v1/project_comments_controller.rb
Normal file
43
app/controllers/api/v1/project_comments_controller.rb
Normal 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
|
|
@ -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))
|
||||
|
|
42
app/controllers/api/v1/reports_controller.rb
Normal file
42
app/controllers/api/v1/reports_controller.rb
Normal 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
|
42
app/controllers/api/v1/user_projects_controller.rb
Normal file
42
app/controllers/api/v1/user_projects_controller.rb
Normal 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
|
14
app/serializers/api/v1/activity_serializer.rb
Normal file
14
app/serializers/api/v1/activity_serializer.rb
Normal 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
|
13
app/serializers/api/v1/project_comment_serializer.rb
Normal file
13
app/serializers/api/v1/project_comment_serializer.rb
Normal 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
|
13
app/serializers/api/v1/report_serializer.rb
Normal file
13
app/serializers/api/v1/report_serializer.rb
Normal 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
|
13
app/serializers/api/v1/user_project_serializer.rb
Normal file
13
app/serializers/api/v1/user_project_serializer.rb
Normal 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
|
|
@ -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),
|
||||
|
|
Loading…
Reference in a new issue