forgeplus/app/services/projects/migrate_service.rb

71 lines
2.0 KiB
Ruby
Raw Normal View History

2020-03-09 00:40:16 +08:00
class Projects::MigrateService < ApplicationService
attr_reader :user, :params
2021-04-29 17:36:36 +08:00
attr_accessor :project
2020-03-09 00:40:16 +08:00
def initialize(user, params)
@user = user
@params = params
end
def call
2021-06-22 15:54:42 +08:00
raise Error, "user_id不正确." unless authroize_user_id_success
2020-03-09 00:40:16 +08:00
@project = Project.new(project_params)
2020-06-23 11:57:24 +08:00
if @project.save!
ProjectUnit.init_types(@project.id, project.project_type)
2020-10-21 11:45:55 +08:00
Project.update_mirror_projects_count!
2021-04-29 17:36:36 +08:00
@project.set_owner_permission(user)
2020-06-23 11:57:24 +08:00
Repositories::MigrateService.new(user, @project, repository_params).call
else
#
2020-03-09 00:40:16 +08:00
end
@project
rescue => e
puts "create mirror project service error: #{e.message}"
raise Error, e.message
end
private
2021-06-22 15:54:42 +08:00
def authroize_user_id_success
(user.id == params[:user_id].to_i) || (user.organizations.find_by_id(params[:user_id]).present?)
end
2020-03-09 00:40:16 +08:00
def project_params
{
name: params[:name],
user_id: params[:user_id],
2020-06-23 11:57:24 +08:00
project_type: set_project_type,
2020-03-09 00:40:16 +08:00
description: params[:description],
2020-06-23 11:57:24 +08:00
identifier: params[:repository_name],
is_public: project_secretion[:public],
2020-03-09 00:40:16 +08:00
project_category_id: params[:project_category_id],
project_language_id: params[:project_language_id],
}
end
def set_project_type
ActiveModel::Type::Boolean.new.cast(params[:is_mirror]) == true ? Project.project_types[:sync_mirror] : Project.project_types[:mirror]
end
2020-03-09 00:40:16 +08:00
def repository_params
{
hidden: project_secretion[:hidden],
identifier: params[:repository_name],
mirror_url: params[:clone_addr],
2021-02-21 17:14:51 +08:00
user_id: params[:user_id],
login: params[:auth_username],
password: params[:auth_password],
2021-04-29 18:35:57 +08:00
is_mirror: params[:is_mirror],
source_clone_url: params[:source_clone_url]
2020-03-09 00:40:16 +08:00
}
end
def project_secretion
# 默认公开
public, hidden = true, false
public, hidden = false, true if ActiveModel::Type::Boolean.new.cast(params[:private]) == true
{ public: public, hidden: hidden }
end
end