forgeplus/app/services/projects/apply_transfer_service.rb

44 lines
1.5 KiB
Ruby
Raw Normal View History

2021-04-25 18:41:13 +08:00
class Projects::ApplyTransferService < ApplicationService
attr_accessor :owner, :applied_transfer_project
2021-04-26 10:57:57 +08:00
attr_reader :user, :project, :params
2021-04-25 18:41:13 +08:00
2021-04-26 10:57:57 +08:00
def initialize(user, project, params)
2021-04-25 18:41:13 +08:00
@user = user
@project = project
2021-04-26 10:57:57 +08:00
@params = params
@owner = Owner.find_by(login: params[:owner_name])
2021-04-25 18:41:13 +08:00
end
def call
Rails.logger.info("###### Project apply_transfer_service begin ######")
validate!
create_apply
send_apply_message
Rails.logger.info("###### Project apply_transfer_service end ######")
return @applied_transfer_project
end
private
def validate!
2021-04-26 10:57:57 +08:00
raise Error, '仓库标识不正确' if @project.identifier != params[:identifier]
2021-04-25 18:41:13 +08:00
raise Error, '该仓库正在迁移' if @project.is_transfering
raise Error, '新拥有者不存在' unless @owner.present?
2021-09-29 10:49:39 +08:00
raise Error, '新拥有者资料不完善' if @owner.is_a?(User) && !@owner.profile_is_completed?
2021-04-27 13:56:12 +08:00
raise Error, '新拥有者已经存在同名仓库!' if Project.where(user_id: @owner.id, identifier: params[:identifier]).present?
2021-04-25 18:41:13 +08:00
raise Error, '未拥有转移权限' unless is_permit_owner
end
def is_permit_owner
return true unless @owner.is_a?(Organization)
2021-08-25 17:15:13 +08:00
return @owner.is_admin?(@user)
2021-04-25 18:41:13 +08:00
end
def create_apply
2021-04-26 10:07:22 +08:00
@applied_transfer_project = AppliedTransferProject.create!(user_id: user.id, project_id: project.id, owner_id: @owner.id)
2021-04-25 18:41:13 +08:00
end
def send_apply_message
SendTransferProjectAppliedMessageJob.perform_now(@applied_transfer_project, @user, 'common')
end
end