|
- class Repositories::MigrateService < ApplicationService
- attr_reader :user, :project, :params
-
- 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!
- gitea_repository = Gitea::Repository::MigrateService.new(user.gitea_token, gitea_repository_params).call
- sync_project(gitea_repository)
- sync_repository(@repository, gitea_repository)
- end
- @repository
- end
- rescue => e
- puts "create mirror repository service error: #{e.message}"
- raise Error, e.message
- end
-
- private
-
- def sync_project(gitea_repository)
- project.update_columns(gpid: gitea_repository["id"], identifier: gitea_repository["name"]) if gitea_repository
- end
-
- def sync_repository(repository, gitea_repository)
- repository.update_columns(url: gitea_repository["clone_url"]) if gitea_repository
- end
-
- def repository_params
- params.merge(project_id: project.id)
- end
-
- def gitea_repository_params
- {
- clone_addr: params[:mirror_url],
- repo_name: params[:identifier],
- uid: user.gitea_uid,
- private: params[:hidden]
- }
- end
- end
|