mirror of
https://gitlink.org.cn/Gitlink/forgeplus.git
synced 2026-05-03 03:40:49 +08:00
init project
This commit is contained in:
35
app/services/projects/join_service.rb
Normal file
35
app/services/projects/join_service.rb
Normal file
@@ -0,0 +1,35 @@
|
||||
class Projects::JoinService < ApplicationService
|
||||
attr_reader :project, :user, :opts
|
||||
|
||||
def initialize(project, user, **opts)
|
||||
@project = project
|
||||
@user = user
|
||||
@opts = opts
|
||||
end
|
||||
|
||||
def call
|
||||
ActiveRecord::Base.transaction do
|
||||
member = project.members.create!(user: user)
|
||||
|
||||
member.member_roles.create!(role_id: role_value)
|
||||
|
||||
project.user_grades.find_or_create_by!(user: user)
|
||||
end
|
||||
|
||||
ApplyJoinProjectNotifyJob.perform_later(user, project, role_value)
|
||||
|
||||
project
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def role_value
|
||||
@_role ||=
|
||||
case opts[:role]
|
||||
when 'manager' then 3
|
||||
when 'developer' then 4
|
||||
when 'reporter' then 5
|
||||
else raise ArgumentError
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user