From a86372dc16ee29f4e1b89550bb00f32f14a752bf Mon Sep 17 00:00:00 2001 From: yystopf Date: Fri, 27 Jun 2025 15:25:59 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=EF=BC=9A=E5=91=A8?= =?UTF-8?q?=E6=8A=A5=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/views/api/pm/weekly_issues/personal_issues.json.jbuilder | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/views/api/pm/weekly_issues/personal_issues.json.jbuilder b/app/views/api/pm/weekly_issues/personal_issues.json.jbuilder index 6c2f67909..d4f89b375 100644 --- a/app/views/api/pm/weekly_issues/personal_issues.json.jbuilder +++ b/app/views/api/pm/weekly_issues/personal_issues.json.jbuilder @@ -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 \ No newline at end of file From 8c9f6d61759d0a8039b114aeb975660470d8f1f3 Mon Sep 17 00:00:00 2001 From: yystopf Date: Tue, 1 Jul 2025 16:19:15 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E6=96=B0=E5=A2=9E=EF=BC=9A=E5=90=8C?= =?UTF-8?q?=E6=AD=A5github=E7=BB=84=E7=BB=87=E4=B8=8B=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/controllers/api/v1/base_controller.rb | 5 +++ .../sync_repositories_controller.rb | 37 +++++++++++++++++++ config/routes/api.rb | 3 ++ 3 files changed, 45 insertions(+) create mode 100644 app/controllers/api/v1/organizations/sync_repositories_controller.rb diff --git a/app/controllers/api/v1/base_controller.rb b/app/controllers/api/v1/base_controller.rb index d9db4b99c..38e10d5f5 100644 --- a/app/controllers/api/v1/base_controller.rb +++ b/app/controllers/api/v1/base_controller.rb @@ -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 diff --git a/app/controllers/api/v1/organizations/sync_repositories_controller.rb b/app/controllers/api/v1/organizations/sync_repositories_controller.rb new file mode 100644 index 000000000..9a4d7e077 --- /dev/null +++ b/app/controllers/api/v1/organizations/sync_repositories_controller.rb @@ -0,0 +1,37 @@ +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? + @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 \ No newline at end of file diff --git a/config/routes/api.rb b/config/routes/api.rb index 3d8c8b536..d66bedc50 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -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] From cabc9775bc89473b59a4e5590cffa6515bc2c5bc Mon Sep 17 00:00:00 2001 From: yystopf Date: Wed, 2 Jul 2025 14:56:27 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E6=9B=B4=E6=94=B9=EF=BC=9A=E5=AF=BC?= =?UTF-8?q?=E5=85=A5=E5=90=8C=E6=AD=A5=E9=A1=B9=E7=9B=AE=E5=A4=B1=E8=B4=A5?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/v1/organizations/sync_repositories_controller.rb | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/controllers/api/v1/organizations/sync_repositories_controller.rb b/app/controllers/api/v1/organizations/sync_repositories_controller.rb index 9a4d7e077..d02dcd40c 100644 --- a/app/controllers/api/v1/organizations/sync_repositories_controller.rb +++ b/app/controllers/api/v1/organizations/sync_repositories_controller.rb @@ -16,6 +16,11 @@ class Api::V1::Organizations::SyncRepositoriesController < Api::V1::BaseControll # 检查是否已经存在该仓库 @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