forked from Gitlink/forgeplus
73 lines
2.1 KiB
Ruby
73 lines
2.1 KiB
Ruby
class Organizations::CreateService < ApplicationService
|
|
attr_reader :user, :params
|
|
attr_accessor :organization, :gitea_organization, :owner_team
|
|
|
|
def initialize(user, params)
|
|
@user = user
|
|
@params = params
|
|
end
|
|
|
|
def call
|
|
Rails.logger.info("######Organization create_service begin######")
|
|
Rails.logger.info("######params #{params}######")
|
|
ActiveRecord::Base.transaction do
|
|
create_org_and_extension
|
|
create_owner_info
|
|
create_gitea_org
|
|
sync_gitea_info
|
|
|
|
Rails.logger.info("######Organization create_service end######")
|
|
end
|
|
@organization
|
|
end
|
|
|
|
private
|
|
def description
|
|
params[:description]
|
|
end
|
|
|
|
def website
|
|
params[:website]
|
|
end
|
|
|
|
def location
|
|
params[:location].present? ? params[:location] : nil
|
|
end
|
|
|
|
def repo_admin_change_team_access
|
|
params[:repo_admin_change_team_access].present? ? params[:repo_admin_change_team_access] : false
|
|
end
|
|
|
|
def visibility
|
|
params[:visibility].present? ? params[:visibility] : "common"
|
|
end
|
|
|
|
def max_repo_creation
|
|
params[:max_repo_creation].present? ? params[:max_repo_creation] : -1
|
|
end
|
|
|
|
def create_org_and_extension
|
|
@organization = Organization.build(params[:name], params[:nickname], user.gitea_token)
|
|
org_extension = OrganizationExtension.build(organization.id, description, website,
|
|
location, repo_admin_change_team_access,
|
|
visibility, max_repo_creation)
|
|
end
|
|
|
|
def create_owner_info
|
|
@owner_team = Team.build(organization.id, "Owners", "Owner团队", "", 4, true, true)
|
|
TeamUnit.unit_types.keys.each do |u_type|
|
|
TeamUnit.build(organization.id, owner_team.id, u_type)
|
|
end
|
|
OrganizationUser.build(organization.id, user.id)
|
|
TeamUser.build(organization.id, user.id, owner_team.id)
|
|
end
|
|
|
|
def create_gitea_org
|
|
@gitea_organization = Gitea::Organization::CreateService.call(@organization.gitea_token, organization)
|
|
end
|
|
|
|
def sync_gitea_info
|
|
organization.update!(gitea_uid: gitea_organization["id"])
|
|
owner_team.update!(gtid: gitea_organization["owner_team"]["id"])
|
|
end
|
|
end |