From a63d675a92c0117b821e15184fc1f76240b2670b Mon Sep 17 00:00:00 2001 From: Jasder <2053003901@@qq.com> Date: Mon, 19 Oct 2020 23:39:44 +0800 Subject: [PATCH] =?UTF-8?q?FIX=20=E5=90=8C=E6=AD=A5educoder=E5=B9=B3?= =?UTF-8?q?=E5=8F=B0=E5=AE=9E=E8=AE=AD=E9=A1=B9=E7=9B=AE=E6=94=BE=E5=85=A5?= =?UTF-8?q?job=E4=B8=AD=E6=89=A7=E8=A1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/jobs/sync_educoder_shixun_job.rb | 68 ++++++++++++++++++++++++++++ app/models/project.rb | 60 +----------------------- 2 files changed, 69 insertions(+), 59 deletions(-) create mode 100644 app/jobs/sync_educoder_shixun_job.rb diff --git a/app/jobs/sync_educoder_shixun_job.rb b/app/jobs/sync_educoder_shixun_job.rb new file mode 100644 index 000000000..d6f170ab9 --- /dev/null +++ b/app/jobs/sync_educoder_shixun_job.rb @@ -0,0 +1,68 @@ +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 + logger.info "======= 接口请求失败!" + 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'], + image_url: re['image_url']) + + repo = Repository.new(repo_params) + repo.save! + + logger.info "项目: #{re['name']} 同步成功" + else + logger.info "项目: #{re['name']} 同步失败" + end + end + end + end + +end diff --git a/app/models/project.rb b/app/models/project.rb index d680984dd..38cd00316 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -202,64 +202,6 @@ class Project < ApplicationRecord end def self.sync_educoder_shixun(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 - logger.info "======= 接口请求失败!" - return - end - - result['data']['repositories'].each do |re| - next if re['repo_name'].blank? - 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'], - image_url: re['image_url']) - - repo = Repository.new(repo_params) - repo.save! - - logger.info "项目: #{re['name']} 同步成功" - else - logger.info "项目: #{re['name']} 同步失败" - end - end - end + SyncEducoderShixunJob.perform_later(uri, private_token, page, per_page) end end