Add additional info to API project_user_assignments type error [SCI-6273] (#3674)

* Add additional info to API project_user_assignments type error [SCI-6273]

* Generalize user_assignments api controllers [SCI-6237]
This commit is contained in:
artoscinote 2021-11-17 16:28:02 +01:00 committed by GitHub
parent 2a135ac120
commit 6b6a49428c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 56 additions and 58 deletions

View file

@ -17,14 +17,14 @@ module Api
.per(params.dig(:page, :size))
render jsonapi: user_assignments,
each_serializer: ExperimentUserAssignmentSerializer,
include: %i(user user_role)
each_serializer: UserAssignmentSerializer,
include: include_params
end
def show
render jsonapi: @user_assignment,
serializer: ExperimentUserAssignmentSerializer,
include: %i(user user_role)
serializer: UserAssignmentSerializer,
include: include_params
end
def update
@ -42,7 +42,7 @@ module Api
experiment_member.update(user_role_id: user_role.id, user_id: user.id)
render jsonapi: experiment_member.user_assignment.reload,
serializer: ExperimentUserAssignmentSerializer,
serializer: UserAssignmentSerializer,
status: :ok
end
@ -61,10 +61,14 @@ module Api
end
def user_assignment_params
raise TypeError unless params.require(:data).require(:type) == 'experiment_user_assignments'
raise TypeError unless params.require(:data).require(:type) == 'user_assignments'
params.require(:data).require(:attributes).permit(:user_id, :user_role_id)
end
def permitted_includes
%w(user user_role assignable)
end
end
end
end

View file

@ -9,6 +9,15 @@ module Api
before_action :load_user_assignment, only: %i(show update destroy)
before_action :load_user_project_for_managing, only: %i(show update destroy)
rescue_from TypeError do
# TEMP (17.10.2021) additional error details when using the deprecated user_projects
detail_key = params.dig('data', 'type') == 'user_projects' ? 'user_projects_detail' : 'detail'
render_error(I18n.t('api.core.errors.type.title'),
I18n.t("api.core.errors.type.#{detail_key}"),
:bad_request)
end
def index
user_assignments = @project.user_assignments
.includes(:user_role)
@ -16,14 +25,14 @@ module Api
.per(params.dig(:page, :size))
render jsonapi: user_assignments,
each_serializer: ProjectUserAssignmentSerializer,
include: %i(user user_role)
each_serializer: UserAssignmentSerializer,
include: include_params
end
def show
render jsonapi: @user_assignment,
serializer: ProjectUserAssignmentSerializer,
include: %i(user user_role)
serializer: UserAssignmentSerializer,
include: include_params
end
def create
@ -38,7 +47,7 @@ module Api
project_member.create
render jsonapi: project_member.user_assignment.reload,
serializer: ProjectUserAssignmentSerializer,
serializer: UserAssignmentSerializer,
status: :created
end
@ -52,7 +61,7 @@ module Api
project_member.user_role_id = user_role.id
project_member.update
render jsonapi: @user_assignment.reload, serializer: ProjectUserAssignmentSerializer, status: :ok
render jsonapi: @user_assignment.reload, serializer: UserAssignmentSerializer, status: :ok
end
def destroy
@ -76,10 +85,14 @@ module Api
end
def user_project_params
raise TypeError unless params.require(:data).require(:type) == 'project_user_assignments'
raise TypeError unless params.require(:data).require(:type) == 'user_assignments'
params.require(:data).require(:attributes).permit(:user_id, :user_role_id)
end
def permitted_includes
%w(user user_role assignable)
end
end
end
end

View file

@ -18,14 +18,14 @@ module Api
.per(params.dig(:page, :size))
render jsonapi: user_assignments,
each_serializer: TaskUserAssignmentSerializer,
include: %i(user user_role)
each_serializer: UserAssignmentSerializer,
include: include_params
end
def show
render jsonapi: @user_assignment,
serializer: TaskUserAssignmentSerializer,
include: %i(user user_role)
serializer: UserAssignmentSerializer,
include: include_params
end
def update
@ -45,7 +45,7 @@ module Api
my_module_member.update(user_role_id: user_role.id, user_id: user.id)
render jsonapi: my_module_member.user_assignment.reload,
serializer: TaskUserAssignmentSerializer,
serializer: UserAssignmentSerializer,
status: :ok
end
@ -64,10 +64,14 @@ module Api
end
def user_assignment_params
raise TypeError unless params.require(:data).require(:type) == 'task_user_assignments'
raise TypeError unless params.require(:data).require(:type) == 'user_assignments'
params.require(:data).require(:attributes).permit(:user_id, :user_role_id)
end
def permitted_includes
%w(user user_role assignable)
end
end
end
end

View file

@ -1,13 +0,0 @@
# frozen_string_literal: true
module Api
module V1
class ExperimentUserAssignmentSerializer < ActiveModel::Serializer
type :experiment_user_assignments
attributes :id
belongs_to :user, serializer: UserSerializer
belongs_to :user_role, serializer: UserRoleSerializer
end
end
end

View file

@ -1,13 +0,0 @@
# frozen_string_literal: true
module Api
module V1
class ProjectUserAssignmentSerializer < ActiveModel::Serializer
type :project_user_assignments
attributes :id
belongs_to :user, serializer: UserSerializer
belongs_to :user_role, serializer: UserRoleSerializer
end
end
end

View file

@ -1,13 +0,0 @@
# frozen_string_literal: true
module Api
module V1
class TaskUserAssignmentSerializer < ActiveModel::Serializer
type :task_user_assignments
attributes :id
belongs_to :user, serializer: UserSerializer
belongs_to :user_role, serializer: UserRoleSerializer
end
end
end

View file

@ -0,0 +1,15 @@
# frozen_string_literal: true
module Api
module V1
class UserAssignmentSerializer < ActiveModel::Serializer
type :user_assignments
attributes :id
belongs_to :user_role
belongs_to :user
belongs_to :assignable
include TimestampableModel
end
end
end

View file

@ -2726,6 +2726,7 @@ en:
type:
title: "Wrong type"
detail: "Wrong object type within parameters"
user_projects_detail: "Wrong object type within parameters. This endpoint has been changed and you should use 'user_assignments' instead of 'user_projects'"
inventory_column_type:
detail: "Update of data_type attribute is not allowed"
result_missing_tinymce: