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]) 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