forgeplus/app/jobs/send_transfer_project_appli...

47 lines
2.1 KiB
Ruby

class SendTransferProjectAppliedMessageJob < ApplicationJob
queue_as :default
def perform(applied_transfer_project, applied_user, message_status)
project = applied_transfer_project.project
owner = project.owner
return unless project.present?
return unless owner.present?
if owner.is_a?(Organization)
receivers = project.managers + owner.team_users.joins(:team).where(teams: {authorize: %w(owner admin)})
else
receivers = project.managers
end
receivers.each do |rec|
next if applied_user.id == rec.user_id # 自己不要给自己发通知
AppliedMessage.create!(user_id: rec.user_id,
applied: applied_transfer_project,
status: message_status,
name: build_name(project.name, applied_transfer_project&.owner&.real_name, message_status, applied_user&.real_name),
applied_user_id: applied_user.id,
project_id: project.id)
end
if message_status == 'successed' # 如果转移成功,给转移发起者发通知已转移成功
AppliedMessage.find_or_create_by!(user_id: applied_transfer_project.user_id,
applied: applied_transfer_project,
status: message_status,
name: build_name(project.name, applied_transfer_project&.owner&.real_name, message_status),
applied_user_id: applied_user.id,
project_id: project.id)
end
end
private
def build_name(repo_name, owner_name, message_status, applied_name="")
case message_status
when 'canceled'
return "取消转移【#{repo_name}】仓库"
when 'common'
return "正在将【#{repo_name}】仓库转移给【#{owner_name}"
when 'successed'
return "#{repo_name}】仓库成功转移给【#{owner_name}"
when 'failure'
return "拒绝转移【#{repo_name}】仓库"
end
""
end
end