diff --git a/app/controllers/users/applied_transfer_projects_controller.rb b/app/controllers/users/applied_transfer_projects_controller.rb index 74366bb55..b1777f526 100644 --- a/app/controllers/users/applied_transfer_projects_controller.rb +++ b/app/controllers/users/applied_transfer_projects_controller.rb @@ -7,7 +7,7 @@ class Users::AppliedTransferProjectsController < Users::BaseController user_collection_sql = AppliedTransferProject.where(owner_id: @_observed_user.id).to_sql org_collection_sql = AppliedTransferProject.where(owner_id: Organization.joins(team_users: :team).where(team_users: {user_id: @_observed_user.id}, teams: {authorize: %w(admin owner)} )).to_sql @applied_transfer_projects = AppliedTransferProject.from("( #{ user_collection_sql } UNION #{ org_collection_sql } ) AS applied_transfer_projects") - @applied_transfer_projects = paginate @applied_transfer_projects + @applied_transfer_projects = paginate @applied_transfer_projects.order("created_at desc") end # 接受迁移 diff --git a/app/jobs/send_transfer_project_applied_message_job.rb b/app/jobs/send_transfer_project_applied_message_job.rb index ef05f266d..5f0c24c65 100644 --- a/app/jobs/send_transfer_project_applied_message_job.rb +++ b/app/jobs/send_transfer_project_applied_message_job.rb @@ -3,7 +3,7 @@ class SendTransferProjectAppliedMessageJob < ApplicationJob def perform(applied_transfer_project, applied_user, message_status) project = applied_transfer_project.project - owner = applied_transfer_project.owner + owner = project.owner return unless project.present? return unless owner.present? if owner.is_a?(Organization) @@ -12,13 +12,22 @@ class SendTransferProjectAppliedMessageJob < ApplicationJob 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, owner.real_name, 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 + 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 diff --git a/app/services/projects/accept_transfer_service.rb b/app/services/projects/accept_transfer_service.rb index 284499002..c99885ca0 100644 --- a/app/services/projects/accept_transfer_service.rb +++ b/app/services/projects/accept_transfer_service.rb @@ -1,11 +1,12 @@ class Projects::AcceptTransferService < ApplicationService - attr_accessor :applied_transfer_project + attr_accessor :applied_transfer_project, :owner attr_reader :user, :project def initialize(user, project) @user = user @project = project @applied_transfer_project = project.applied_transfer_project + @owner = @applied_transfer_project.owner end def call @@ -26,7 +27,12 @@ class Projects::AcceptTransferService < ApplicationService private def validate! raise Error, '该仓库未在迁移' unless @applied_transfer_project.present? && @project.is_transfering - raise Error, '未拥有接受转移权限' unless @user.admin? || @project.manager?(@user) + raise Error, '未拥有接受转移权限' unless is_permit_operator + end + + def is_permit_operator + return true if @user == @owner + return @owner.is_a?(Organization) && @owner.is_admin?(@user) end def update_apply @@ -34,7 +40,7 @@ class Projects::AcceptTransferService < ApplicationService end def operate_project - @project = Projects::TransferService.call(@project, @applied_transfer_project.owner) + @project = Projects::TransferService.call(@project, @owner) end def send_apply_message diff --git a/app/services/projects/refuse_transfer_service.rb b/app/services/projects/refuse_transfer_service.rb index b8199e65e..1b81b5741 100644 --- a/app/services/projects/refuse_transfer_service.rb +++ b/app/services/projects/refuse_transfer_service.rb @@ -1,11 +1,12 @@ class Projects::RefuseTransferService < ApplicationService - attr_accessor :applied_transfer_project + attr_accessor :applied_transfer_project, :owner attr_reader :user, :project def initialize(user, project) @user = user @project = project @applied_transfer_project = project.applied_transfer_project + @owner = @applied_transfer_project.owner end def call @@ -21,7 +22,12 @@ class Projects::RefuseTransferService < ApplicationService private def validate! raise Error, '该仓库未在迁移' unless @applied_transfer_project.present? && @project.is_transfering - raise Error, '未拥有拒绝转移权限' unless @user.admin? || @project.manager?(@user) + raise Error, '未拥有拒绝转移权限' unless is_permit_operator + end + + def is_permit_operator + return true if @user == @owner + return @owner.is_a?(Organization) && @owner.is_admin?(@user) end def update_apply diff --git a/app/services/projects/transfer_service.rb b/app/services/projects/transfer_service.rb index b32b24817..4582a2103 100644 --- a/app/services/projects/transfer_service.rb +++ b/app/services/projects/transfer_service.rb @@ -23,6 +23,7 @@ class Projects::TransferService < ApplicationService private def update_owner + project.members.find_by(user_id: owner.id).destroy! if owner.is_a?(User) project.update!(user_id: new_owner.id) end