mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2024-11-18 15:13:21 +08:00
49 lines
1.5 KiB
Ruby
49 lines
1.5 KiB
Ruby
|
# frozen_string_literal: true
|
||
|
|
||
|
module Api
|
||
|
module V1
|
||
|
class TaskAssignmentsController < BaseController
|
||
|
before_action :load_team
|
||
|
before_action :load_project
|
||
|
before_action :load_experiment
|
||
|
before_action :load_task
|
||
|
before_action :check_manage_permissions, only: %i(create destroy)
|
||
|
|
||
|
def index
|
||
|
users = User.joins(:user_my_modules)
|
||
|
.where(user_my_modules: { my_module_id: @task.id })
|
||
|
.page(params.dig(:page, :number))
|
||
|
.per(params.dig(:page, :size))
|
||
|
render jsonapi: users, each_serializer: UserSerializer
|
||
|
end
|
||
|
|
||
|
def create
|
||
|
user = User.find task_assignment_params[:user_id]
|
||
|
um = UserMyModule.new(my_module: @task, user: user)
|
||
|
um.assigned_by = current_user
|
||
|
um.log_activity(:designate_user_to_my_module, um.assigned_by) if um.save!
|
||
|
|
||
|
render jsonapi: um, serializer: TaskAssignmentSerializer
|
||
|
end
|
||
|
|
||
|
def destroy
|
||
|
um = @task.user_my_modules.find_by!(user_id: params.require(:id))
|
||
|
um.log_activity(:undesignate_user_from_my_module, current_user) if um.destroy
|
||
|
render body: nil
|
||
|
end
|
||
|
|
||
|
private
|
||
|
|
||
|
def task_assignment_params
|
||
|
raise TypeError unless params.require(:data).require(:type) == 'task_assignments'
|
||
|
|
||
|
params.require(:data).require(:attributes).permit(:user_id)
|
||
|
end
|
||
|
|
||
|
def check_manage_permissions
|
||
|
raise PermissionError.new(MyModule, :manage) unless can_manage_my_module?(@task)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|