forgeplus/app/jobs/sync_educoder_shixun_job.rb

74 lines
2.1 KiB
Ruby

require 'uri'
require 'net/http'
class SyncEducoderShixunJob < ApplicationJob
queue_as :default
def perform(url, private_token, page, per_page)
uri = URI("#{url}?page=#{page}&per_page=#{per_page}&private_token=#{private_token}")
puts "-------url: #{uri}"
response = Net::HTTP.get_response(uri)
result = JSON.parse(response.body)
if result['status'] != 0
puts "======= 接口请求失败!"
return
end
result['data']['repositories'].each do |re|
next if re['repo_name'].blank?
next if ProjectEducoder.exists?(repo_name: re['repo_name'])
language = ProjectLanguage.find_by_name re['language']
language = ProjectLanguage.create!(name: re['language']) if language.blank?
category = ProjectCategory.find_by_name re['category']
category = ProjectCategory.create!(name: re['category']) if category.blank?
project_params =
{
name: re['name'],
# user_id: params[:user_id],
description: re['description'],
project_category_id: category.id,
project_language_id: language.id,
is_public: true,
# ignore_id: params[:ignore_id],
# license_id: params[:license_id],
identifier: re['repo_name'],
platform: Project.platforms[:educoder]
}
project = Project.new(project_params)
ActiveRecord::Base.transaction do
if project.save!
repo_params =
{
hidden: false,
project_id: project.id,
identifier: re['repo_name']
}
ProjectEducoder.create!(
project_id: project.id,
owner: re['username'],
repo_name: re['repo_name'],
forked_count: re['forked_count'],
commit_count: re['commit_count'],
image_url: re['image_url'])
repo = Repository.new(repo_params)
repo.save!
puts "项目: #{re['name']} 同步成功"
else
puts "项目: #{re['name']} 同步失败"
end
end
end
end
end