|
- class Api::V1::Users::DeleteUserService < ApplicationService
- attr_reader :user
- def initialize(user)
- @user = user
- end
-
- def call
- begin
- ActiveRecord::Base.transaction do
- org_ids = TeamUser.where(user_id: @user.id).pluck(:organization_id) | OrganizationUser.where(user_id: @user.id).pluck(:organization_id)
- organizations = Organization.where(id: org_ids)
- organizations.each do |org|
- # org.team_users.joins(:team).where(user_id: @user.id, teams: {authorize: %w(owner)})
- owner_count = org.team_users.joins(:team).where(teams: {authorize: %w(owner)}).count
- # 多个owner时,仅将用户从组织移除, 一个时直接删除
- if owner_count > 1
- org.team_users.joins(:team).where(user_id: @user.id, teams: {authorize: %w(owner)}).destroy_all
- org.organization_users.where(user_id: @user.id, organization_id: org.id).destroy_all
- else
- org.destroy
- end
- end
- @user.destroy!
- Gitea::User::DeleteService.call(@user.login, true)
- end
- return true
- rescue
- raise Error, "服务器错误,请联系系统管理员!"
- end
- end
- end
|