|
- 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
|