class Repositories::CreateService < ApplicationService attr_reader :user, :project, :params attr_accessor :repository, :gitea_repository def initialize(user, project, params) @project = project @user = user @params = params end def call @repository = Repository.new(repository_params) ActiveRecord::Base.transaction do if repository.save! create_gitea_repository sync_project sync_repository @project.set_owner_permission(user) # if project.project_type == "common" # chain_params = { # type: "create", # chain_params:{ # username: user.try(:login), # reponame: @repository.try(:identifier), # token_name: @repository.try(:identifier), # total_supply: 1000000 # } # } # PostChainJob.perform_later(chain_params) #创建上链操作 # end else Rails.logger.info("#############___________create_repository_erros______###########{@repository.errors.messages}") end repository end rescue => e puts "create repository service error: #{e.message}" raise Error, e.message end private def create_gitea_repository if project.owner.is_a?(User) @gitea_repository = Gitea::Repository::CreateService.new(user.gitea_token, gitea_repository_params).call elsif project.owner.is_a?(Organization) @gitea_repository = Gitea::Organization::Repository::CreateService.call(user.gitea_token, project.owner.login, gitea_repository_params) end end def sync_project if gitea_repository project.update_columns( gpid: gitea_repository["id"], identifier: repository.identifier, default_branch: gitea_repository["default_branch"], forked_count: gitea_repository["forks_count"]) end end def sync_repository repository.update_columns(url: remote_repository_url,) if gitea_repository end def remote_repository_url [Gitea.gitea_config[:domain], '/', user.login, '/', params[:identifier], ".git"].join("") end def repository_params params.merge(project_id: project.id) end def gitea_repository_params hash = { name: params[:identifier], private: params[:hidden], # readme: "ReadMe", "auto_init": true, # "description": "string", # "gitignores": "string", # "issue_labels": "string", # "license": "string", # "name": "string", # "private": true, # "readme": "string" } ignore = project.ignore license = project.license hash = hash.merge(license: license.name) if license hash = hash.merge(gitignores: ignore.name) if ignore hash = hash.merge(auto_init: true) if ignore || license hash end end