scinote-web/app/services/user_assignments/create_team_user_assignments_service.rb
2025-07-22 11:35:31 +02:00

56 lines
1.7 KiB
Ruby

# frozen_string_literal: true
module UserAssignments
class CreateTeamUserAssignmentsService
def initialize(team_user_assignment)
@user = team_user_assignment.user
@team = team_user_assignment.assignable
@user_role = team_user_assignment.user_role
@assigned_by = team_user_assignment.assigned_by
@viewer_role = UserRole.find_predefined_viewer_role
end
def call
create_public_projects_assignments
create_repositories_assignments
create_protocols_assignments
create_reports_assignments
end
private
def create_public_projects_assignments
@team.projects.visible.find_each do |project|
UserAssignments::ProjectGroupAssignmentJob.perform_later(project, @assigned_by&.id, @user.id)
end
end
def create_repositories_assignments
@team.repositories.find_each do |repository|
create_or_update_user_assignment(repository)
end
end
def create_protocols_assignments
@team.repository_protocols.visible.find_each do |protocol|
create_or_update_user_assignment(protocol, @viewer_role)
end
end
def create_reports_assignments
@team.reports.find_each do |report|
create_or_update_user_assignment(report)
end
end
def create_or_update_user_assignment(object, role = nil)
new_user_assignment = object.user_assignments.find_or_initialize_by(user: @user, team: object.team)
return if new_user_assignment.manually_assigned?
new_user_assignment.user_role = role || @user_role
new_user_assignment.assigned_by = @assigned_by
new_user_assignment.assigned = :automatically
new_user_assignment.save!
end
end
end