forgeplus/app/services/organizations/create_service.rb

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