mirror of
https://github.com/scinote-eln/scinote-web.git
synced 2025-10-08 21:06:24 +08:00
Handle project "visibility" property backward-compatibility on API [SCI-12041]
This commit is contained in:
parent
9ff2a2ade8
commit
0bd7da7922
2 changed files with 45 additions and 16 deletions
|
@ -26,32 +26,57 @@ module Api
|
||||||
def create
|
def create
|
||||||
raise PermissionError.new(Project, :create) unless can_create_projects?(@team)
|
raise PermissionError.new(Project, :create) unless can_create_projects?(@team)
|
||||||
|
|
||||||
project = @team.projects.build(project_params.merge!(created_by: current_user))
|
ActiveRecord::Base.transaction do
|
||||||
|
project = @team.projects.build(project_params.merge!(created_by: current_user))
|
||||||
|
|
||||||
if project.visible? # set default viewer role for public projects
|
project.save!
|
||||||
project.default_public_user_role = UserRole.predefined.find_by(name: I18n.t('user_roles.predefined.viewer'))
|
|
||||||
|
if project_params[:visibility] == 'visible'
|
||||||
|
project.team_assignments.create!(
|
||||||
|
team: project.team,
|
||||||
|
user_role: UserRole.find_predefined_viewer_role,
|
||||||
|
assigned_by: current_user,
|
||||||
|
assigned: :manually
|
||||||
|
)
|
||||||
|
end
|
||||||
|
|
||||||
|
render jsonapi: project, serializer: ProjectSerializer, scope: { metadata: params['with-metadata'] == 'true' }, status: :created
|
||||||
end
|
end
|
||||||
|
|
||||||
project.save!
|
|
||||||
|
|
||||||
render jsonapi: project, serializer: ProjectSerializer, scope: { metadata: params['with-metadata'] == 'true' }, status: :created
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def update
|
def update
|
||||||
@project.assign_attributes(project_params)
|
@project.assign_attributes(project_params)
|
||||||
|
|
||||||
return render body: nil, status: :no_content unless @project.changed?
|
return render body: nil, status: :no_content if !@project.changed? && project_params[:visibility].blank?
|
||||||
|
|
||||||
if @project.archived_changed?
|
ActiveRecord::Base.transaction do
|
||||||
if @project.archived?
|
if @project.archived_changed?
|
||||||
@project.archived_by = current_user
|
if @project.archived?
|
||||||
else
|
@project.archived_by = current_user
|
||||||
@project.restored_by = current_user
|
else
|
||||||
|
@project.restored_by = current_user
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
@project.last_modified_by = current_user
|
||||||
|
@project.save!
|
||||||
|
|
||||||
|
if project_params[:visibility].present?
|
||||||
|
team_assignment = @project.team_assignments.find_by(team: @team)
|
||||||
|
|
||||||
|
if project_params[:visibility] == 'hidden' && team_assignment.present?
|
||||||
|
team_assignment.destroy!
|
||||||
|
elsif project_params[:visibility] == 'visible' && team_assignment.blank?
|
||||||
|
@project.team_assignments.create!(
|
||||||
|
team: @project.team,
|
||||||
|
user_role: UserRole.find_predefined_viewer_role,
|
||||||
|
assigned_by: current_user,
|
||||||
|
assigned: :manually
|
||||||
|
)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
render jsonapi: @project, serializer: ProjectSerializer, scope: { metadata: params['with-metadata'] == 'true' }, status: :ok
|
||||||
end
|
end
|
||||||
@project.last_modified_by = current_user
|
|
||||||
@project.save!
|
|
||||||
render jsonapi: @project, serializer: ProjectSerializer, scope: { metadata: params['with-metadata'] == 'true' }, status: :ok
|
|
||||||
end
|
end
|
||||||
|
|
||||||
def activities
|
def activities
|
||||||
|
|
|
@ -12,6 +12,10 @@ module Api
|
||||||
has_many :project_comments, key: :comments, serializer: CommentSerializer
|
has_many :project_comments, key: :comments, serializer: CommentSerializer
|
||||||
|
|
||||||
include TimestampableModel
|
include TimestampableModel
|
||||||
|
|
||||||
|
def visibility
|
||||||
|
object.team_assignments.any? ? 'visible' : 'hidden'
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Add table
Reference in a new issue