forked from Gitlink/forgeplus
Merge branch 'pre_trustie_server' into trustie_server
This commit is contained in:
commit
be875b0d57
|
@ -37,6 +37,11 @@ class Api::V1::BaseController < ApplicationController
|
|||
params.fetch(:page, 1)
|
||||
end
|
||||
|
||||
def load_organization
|
||||
@organization = Organization.find_by(login: params[:owner]) || Organization.find_by(id: params[:owner])
|
||||
return render_not_found("组织不存在") if @organization.nil?
|
||||
end
|
||||
|
||||
# 具有对仓库的管理权限
|
||||
def require_manager_above
|
||||
@project = load_project
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
class Api::V1::Organizations::SyncRepositoriesController < Api::V1::BaseController
|
||||
before_action :load_organization, only: [:create]
|
||||
|
||||
def create
|
||||
return render_error("请输入正确的外部组织login") unless params[:external_login].present?
|
||||
# 拉取外部组织仓库列表
|
||||
url = URI("https://api.github.com/orgs/#{params[:external_login]}/repos?page=#{params[:page]}&per_page=#{params[:limit]}")
|
||||
https = Net::HTTP.new(url.host, url.port)
|
||||
https.use_ssl = true
|
||||
request = Net::HTTP::Get.new(url)
|
||||
request["Authorization"] = "Bearer #{params[:external_token]}"
|
||||
response = https.request(request)
|
||||
if response.code == "200"
|
||||
repos = JSON.parse(response.body)
|
||||
repos.each do |repo|
|
||||
# 检查是否已经存在该仓库
|
||||
@project = @organization.projects.find_by(identifier: repo["name"])
|
||||
if @project.present?
|
||||
if @project.repository.mirror.failed?
|
||||
@project.destroy!
|
||||
mirror_params = {name: repo["name"], user_id: @organization.id, description: repo["description"], repository_name: repo["name"], auth_token: params[:external_token], clone_addr: repo["clone_url"]}
|
||||
@project = ::Projects::MigrateService.call(current_user, mirror_params)
|
||||
end
|
||||
@project.update_column(:created_on, repo['created_at'].to_time)
|
||||
@project.update_column(:updated_on, repo['updated_at'].to_time)
|
||||
next
|
||||
else
|
||||
mirror_params = {name: repo["name"], user_id: @organization.id, description: repo["description"], repository_name: repo["name"], auth_token: params[:external_token], clone_addr: repo["clone_url"]}
|
||||
@project = ::Projects::MigrateService.call(current_user, mirror_params)
|
||||
@project.update_column(:created_on, repo['created_at'].to_time)
|
||||
@project.update_column(:updated_on, repo['updated_at'].to_time)
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def sync_repository_params
|
||||
params.permit(:external_token)
|
||||
end
|
||||
|
||||
end
|
|
@ -3,6 +3,6 @@ json.this_week_all_issues @this_week_all_issues.each do |issue|
|
|||
end
|
||||
json.this_week_total_count @this_week_all_issues.total_count
|
||||
json.next_week_all_issues @next_week_all_issues.each do |issue|
|
||||
json.partial! "api/pm/weekly_issues/simple_detail", locals: {issue: issue, weekly_begin_date: @weekly_begin_date+1.week, weekly_end_date: @weekly_end_date+1.week}
|
||||
json.partial! "api/pm/weekly_issues/simple_detail", locals: {issue: issue, weekly_begin_date: @weekly_begin_date.to_date+1.week, weekly_end_date: @weekly_end_date.to_date+1.week}
|
||||
end
|
||||
json.next_week_total_count @next_week_all_issues.total_count
|
|
@ -31,7 +31,7 @@ json.author do
|
|||
json.name user.try(:show_real_name)
|
||||
json.type user&.type
|
||||
json.login user.login
|
||||
json.image_url url_to_avatar(user)
|
||||
json.image_url url_to_avatar(user).present? ? url_to_avatar(user) : User::Avatar.get_letter_avatar_url(user.login)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -83,6 +83,9 @@ defaults format: :json do
|
|||
patch :update_phone
|
||||
end
|
||||
end
|
||||
scope module: :organizations do
|
||||
resources :sync_repositories, only: [:create]
|
||||
end
|
||||
scope module: :users do
|
||||
resources :projects, only: [:index]
|
||||
resources :feedbacks, only: [:create]
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
class AddProjectIndexGpid < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
add_index :projects, :gpid
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue