diff --git a/app/controllers/sync_forge_controller.rb b/app/controllers/sync_forge_controller.rb index b7fdb720b..398b9b542 100644 --- a/app/controllers/sync_forge_controller.rb +++ b/app/controllers/sync_forge_controller.rb @@ -2,12 +2,13 @@ class SyncForgeController < ApplicationController # before_action :check_token def sync_projects - project_params = params[:project] - repository_params = params[:repository] - project_socre = params[:project_socre] - + SyncForgeProjectJob.perform_later(params) + render json: {status: 200} end + + + # def create # ActiveRecord::Base.transaction do # params.permit! diff --git a/app/jobs/sync_forge_project_job.rb b/app/jobs/sync_forge_project_job.rb new file mode 100644 index 000000000..c8b1b2a22 --- /dev/null +++ b/app/jobs/sync_forge_project_job.rb @@ -0,0 +1,41 @@ +class SyncForgeProjectJob < ApplicationJob + queue_as :default + + def perform(params) + Rails.logger.info("=======begin to sync forge projects, and params: #{params}") + get_rand_user = rand_user + project_params = params[:project] + repository_params = params[:repository] + project_socre_params = params[:project_socre] + begin + unless Project.select(:identifier,:user_id).exists?(identifier: project_params[:identifier], user_id: get_rand_user.id) + project_params = project_params.merge({user_id: get_rand_user.id }) + project = Project.new(project_params) + if project.save + repository = Repository.new(repository_params.merge({ project_id: project.id, user_id: get_rand_user.id, login: get_rand_user.login })) + if repository.save # 同步镜像 + repository.sync_mirror! + SyncMirroredRepositoryJob.perform_later(repository.id, get_rand_user.id) + end + project_score = ProjectScore.new(project_socre_params.merge({project_id: project.id})) + project_score.save + end + end + Rails.logger.info("=======end to sync forge projects") + rescue => e + Rails.logger.info("=======sync forge projects has errors: #{e}") + end + end + + private + + def rand_user + user_ids = User.select(:id, :type).where(type: "User").pluck(:id) + range_user_id = user_ids[rand(user_ids.length-1)] + rand_sync_user = User.select(:id, :login).find_by_id(range_user_id) #生成随机用户 + unless rand_sync_user.present? + rand_user + end + rand_sync_user + end +end diff --git a/app/tasks/sync_forge_projects_rake.rb b/app/tasks/sync_forge_projects_rake.rb new file mode 100644 index 000000000..f86137b69 --- /dev/null +++ b/app/tasks/sync_forge_projects_rake.rb @@ -0,0 +1,7 @@ +class SyncForgeProjectsRake + # 运行示例: 检查哪些项目的repo不存在,bundle exec rails runner "SyncForgeProjectsRake.new.call()" + + def call + + end + end \ No newline at end of file