Fix project user assignment [SCI_5925] (#3577)

This commit is contained in:
artoscinote 2021-10-05 13:45:34 +02:00 committed by GitHub
parent c85f5187f3
commit 6fbb22922a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 7 additions and 15 deletions

View file

@ -22,7 +22,7 @@ class MyModuleMember
end
def update(params)
prepare_data(params)
user_assignment(params)
ActiveRecord::Base.transaction do
user_assignment.update!(user_role: user_role, assigned: :manually)
@ -32,7 +32,7 @@ class MyModuleMember
private
def prepare_data(params)
def user_assignment(params)
self.user_role_id = params[:user_role_id]
self.user_id = params[:user_id]

View file

@ -11,8 +11,7 @@ class ProjectMember
validates :user, :project, presence: true, if: -> { assign }
validates :user_role_id, presence: true, if: -> { assign }
validate :validate_role_presence, if: -> { assign }
validate :validate_user_project_relation_presence, if: -> { assign }
validate :validate_user_project_assignment_presence, if: -> { assign }
validate :validate_user_assignment_presence, if: -> { assign }
def initialize(user, project, current_user = nil)
@user = user
@ -25,7 +24,6 @@ class ProjectMember
return unless assign
ActiveRecord::Base.transaction do
@user_project = UserProject.create!(project: @project, user: @user)
user_role = set_user_role
@user_assignment = UserAssignment.create!(
@ -67,12 +65,12 @@ class ProjectMember
def destroy
user_assignment = UserAssignment.find_by!(assignable: @project, user: @user)
user_project = UserProject.find_by!(project: @project, user: @user)
user_project = UserProject.find_by(project: @project, user: @user)
return false if last_project_owner?
ActiveRecord::Base.transaction do
user_assignment.destroy!
user_project.destroy!
user_project&.destroy!
log_activity(:unassign_user_from_project)
UserAssignments::PropagateAssignmentJob.perform_later(
@ -115,14 +113,8 @@ class ProjectMember
errors.add(:user_role_id, :not_found) if UserRole.find_by(id: user_role_id).nil?
end
def validate_user_project_relation_presence
return if UserProject.find_by(project: @project, user: @user).nil?
errors.add(:user)
end
def validate_user_project_assignment_presence
return if UserAssignment.find_by(assignable: @project, user: @user).nil?
def validate_user_assignment_presence
return if UserAssignment.find_by(assignable: @project, user: @user).nil?
errors.add(:user_role_id, :already_present)
end