add: transfer project

This commit is contained in:
2021-04-25 18:41:13 +08:00
parent 8c71a72fce
commit 1e081b5a3e
28 changed files with 416 additions and 4 deletions

View 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

View 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

View 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

View 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