mirror of
https://gitlink.org.cn/Gitlink/forgeplus.git
synced 2026-05-22 20:55:46 +08:00
add: transfer project
This commit is contained in:
43
app/services/projects/accept_transfer_service.rb
Normal file
43
app/services/projects/accept_transfer_service.rb
Normal file
@@ -0,0 +1,43 @@
|
||||
class Projects::AcceptTransferService < ApplicationService
|
||||
attr_accessor :applied_transfer_project
|
||||
attr_reader :user, :project
|
||||
|
||||
def initialize(user, project)
|
||||
@user = user
|
||||
@project = project
|
||||
@applied_transfer_project = project.applied_transfer_project
|
||||
end
|
||||
|
||||
def call
|
||||
Rails.logger.info("###### Project accept_transfer_service begin ######")
|
||||
ActiveRecord::Base.transaction do
|
||||
validate!
|
||||
update_apply
|
||||
operate_project
|
||||
send_apply_message
|
||||
end
|
||||
|
||||
Rails.logger.info("##### Project accept_transfer_service end ######")
|
||||
|
||||
|
||||
return @applied_transfer_project
|
||||
end
|
||||
|
||||
private
|
||||
def validate!
|
||||
raise Error, '该仓库未在迁移' unless @applied_transfer_project.present? && @project.is_transfering
|
||||
raise Error, '未拥有接受转移权限' unless @user.admin? || @project.is_admin?(@user)
|
||||
end
|
||||
|
||||
def update_apply
|
||||
@applied_transfer_project.update!(status: 'accepted')
|
||||
end
|
||||
|
||||
def operate_project
|
||||
@project = Projects::TransferService.call(@project, @applied_transfer_project.owner)
|
||||
end
|
||||
|
||||
def send_apply_message
|
||||
SendTransferProjectAppliedMessageJob.perform_now(@applied_transfer_project, @user, 'successed')
|
||||
end
|
||||
end
|
||||
41
app/services/projects/apply_transfer_service.rb
Normal file
41
app/services/projects/apply_transfer_service.rb
Normal file
@@ -0,0 +1,41 @@
|
||||
class Projects::ApplyTransferService < ApplicationService
|
||||
attr_accessor :owner, :applied_transfer_project
|
||||
attr_reader :user, :project, :owner_id
|
||||
|
||||
def initialize(user, project, owner_id)
|
||||
@user = user
|
||||
@project = project
|
||||
@owner_id = owner_id
|
||||
@owner = Owner.find_by_id(owner_id)
|
||||
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!
|
||||
raise Error, '该仓库正在迁移' if @project.is_transfering
|
||||
raise Error, '新拥有者不存在' unless @owner.present?
|
||||
raise Error, '未拥有转移权限' unless is_permit_owner
|
||||
end
|
||||
|
||||
def is_permit_owner
|
||||
return true unless @owner.is_a?(Organization)
|
||||
return @owner.is_owner?(@user)
|
||||
end
|
||||
|
||||
def create_apply
|
||||
@applied_transfer_project = AppliedTransferProject.create!(user_id: user.id, project_id: project.id, owner_id: owner_id)
|
||||
end
|
||||
|
||||
def send_apply_message
|
||||
SendTransferProjectAppliedMessageJob.perform_now(@applied_transfer_project, @user, 'common')
|
||||
end
|
||||
end
|
||||
33
app/services/projects/cancel_transfer_service.rb
Normal file
33
app/services/projects/cancel_transfer_service.rb
Normal file
@@ -0,0 +1,33 @@
|
||||
class Projects::CancelTransferService < ApplicationService
|
||||
attr_accessor :applied_transfer_project
|
||||
attr_reader :user, :project
|
||||
|
||||
def initialize(user, project)
|
||||
@user = user
|
||||
@project = project
|
||||
@applied_transfer_project = project.applied_transfer_project
|
||||
end
|
||||
|
||||
def call
|
||||
Rails.logger.info("###### Project cancel_transfer_service begin ######")
|
||||
validate!
|
||||
update_apply
|
||||
send_apply_message
|
||||
Rails.logger.info("###### Project cancel_transfer_service end ######")
|
||||
|
||||
return @applied_transfer_project
|
||||
end
|
||||
|
||||
private
|
||||
def validate!
|
||||
raise Error, '该仓库未在迁移' unless @applied_transfer_project.present? && @project.is_transfering
|
||||
end
|
||||
|
||||
def update_apply
|
||||
@applied_transfer_project.update!(status: 'canceled')
|
||||
end
|
||||
|
||||
def send_apply_message
|
||||
SendTransferProjectAppliedMessageJob.perform_now(@applied_transfer_project, @user, 'canceled')
|
||||
end
|
||||
end
|
||||
33
app/services/projects/refuse_transfer_service.rb
Normal file
33
app/services/projects/refuse_transfer_service.rb
Normal file
@@ -0,0 +1,33 @@
|
||||
class Projects::RefuseTransferService < ApplicationService
|
||||
attr_accessor :applied_transfer_project
|
||||
attr_reader :user, :project
|
||||
|
||||
def initialize(user, project)
|
||||
@user = user
|
||||
@project = project
|
||||
@applied_transfer_project = project.applied_transfer_project
|
||||
end
|
||||
|
||||
def call
|
||||
Rails.logger.info("###### Project refuse_transfer_service begin ######")
|
||||
validate!
|
||||
update_apply
|
||||
send_apply_message
|
||||
Rails.logger.info("###### Project refuse_transfer_service end ######")
|
||||
|
||||
return @applied_transfer_project
|
||||
end
|
||||
|
||||
private
|
||||
def validate!
|
||||
raise Error, '该仓库未在迁移' unless @applied_transfer_project.present? && @project.is_transfering
|
||||
end
|
||||
|
||||
def update_apply
|
||||
@applied_transfer_project.update!(status: 'refused')
|
||||
end
|
||||
|
||||
def send_apply_message
|
||||
SendTransferProjectAppliedMessageJob.perform_now(@applied_transfer_project, @user, 'failure')
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user