mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-09-06 13:14:29 +08:00
inital experiments api functionality
This commit is contained in:
parent
2ff8500758
commit
5ada21725f
4 changed files with 69 additions and 4 deletions
40
app/controllers/api/v1/experiments_controller.rb
Normal file
40
app/controllers/api/v1/experiments_controller.rb
Normal file
|
@ -0,0 +1,40 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V1
|
||||
class ExperimentsController < BaseController
|
||||
before_action :load_team
|
||||
before_action :load_project
|
||||
before_action :load_experiment, only: :show
|
||||
|
||||
def index
|
||||
experiments = @project.experiments
|
||||
.page(params.dig(:page, :number))
|
||||
.per(params.dig(:page, :size))
|
||||
|
||||
render jsonapi: experiments, each_serializer: ExperimentSerializer
|
||||
end
|
||||
|
||||
def show
|
||||
render jsonapi: @experiment, serializer: ExperimentSerializer
|
||||
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(:id))
|
||||
render jsonapi: {}, status: :forbidden unless can_read_experiment?(@experiment)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
11
app/serializers/api/v1/experiment_serializer.rb
Normal file
11
app/serializers/api/v1/experiment_serializer.rb
Normal file
|
@ -0,0 +1,11 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V1
|
||||
class ExperimentSerializer < ActiveModel::Serializer
|
||||
type :experiment
|
||||
attributes :id, :name, :description
|
||||
has_many :my_modules
|
||||
end
|
||||
end
|
||||
end
|
11
app/serializers/api/v1/my_module_serializer.rb
Normal file
11
app/serializers/api/v1/my_module_serializer.rb
Normal file
|
@ -0,0 +1,11 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
module Api
|
||||
module V1
|
||||
class MyModuleSerializer < ActiveModel::Serializer
|
||||
type :my_module
|
||||
attributes :id, :name, :due_date, :description, :my_module_group_id, :nr_of_assigned_samples, :state
|
||||
belongs_to :experiment
|
||||
end
|
||||
end
|
||||
end
|
|
@ -554,10 +554,13 @@ Rails.application.routes.draw do
|
|||
path: 'items',
|
||||
as: :items
|
||||
end
|
||||
end
|
||||
resources :users, only: %i(show) do
|
||||
resources :user_identities,
|
||||
only: %i(index create show update destroy)
|
||||
resources :projects, only: %i(index show) do
|
||||
resources :experiments, only: %i(index show)
|
||||
end
|
||||
resources :users, only: %i(show) do
|
||||
resources :user_identities,
|
||||
only: %i(index create show update destroy)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Reference in a new issue