diff --git a/app/controllers/api/v1/projects/sync_repositories_controller.rb b/app/controllers/api/v1/projects/sync_repositories_controller.rb index f4caef95..e344f3ec 100644 --- a/app/controllers/api/v1/projects/sync_repositories_controller.rb +++ b/app/controllers/api/v1/projects/sync_repositories_controller.rb @@ -1,6 +1,11 @@ class Api::V1::Projects::SyncRepositoriesController < Api::V1::BaseController before_action :require_public_and_member_above + def index + @sync_repositories = @project.sync_repositories + @group_sync_repository = @project.sync_repositories.group(:type, :external_repo_address, :sync_granularity).count + end + def create @sync_repository1, @sync_repository2, @sync_repository_branch1, @sync_repository_branch2 = Api::V1::Projects::SyncRepositories::CreateService.call(@project, sync_repository_params) end @@ -16,6 +21,12 @@ class Api::V1::Projects::SyncRepositoriesController < Api::V1::BaseController end end + def branches + return render_error("请输入正确的同步项目ID") unless params[:sync_repository_ids].present? + @sync_repository_branches = SyncRepositoryBranch.where(sync_repository_id: params[:sync_repository_ids].split(",")) + @group_sync_repository_branch = @sync_repository_branches.group(:gitlink_branch_name, :external_branch_name).count + end + private def sync_repository_params params.permit(:type, :external_token, :external_repo_address, :sync_granularity, :external_branch_name, :gitlink_branch_name, :first_sync_direction) diff --git a/app/models/project.rb b/app/models/project.rb index c2702fa0..1c235c71 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -55,14 +55,13 @@ # default_branch :string(255) default("master") # website :string(255) # lesson_url :string(255) +# use_blockchain :boolean default("0") # is_pinned :boolean default("0") # recommend_index :integer default("0") -# use_blockchain :boolean default("0") # pr_view_admin :boolean default("0") # # Indexes # -# index_projects_on_forked_count (forked_count) # index_projects_on_forked_from_project_id (forked_from_project_id) # index_projects_on_identifier (identifier) # index_projects_on_invite_code (invite_code) @@ -72,7 +71,6 @@ # index_projects_on_license_id (license_id) # index_projects_on_name (name) # index_projects_on_platform (platform) -# index_projects_on_praises_count (praises_count) # index_projects_on_project_category_id (project_category_id) # index_projects_on_project_language_id (project_language_id) # index_projects_on_project_type (project_type) @@ -80,7 +78,6 @@ # index_projects_on_rgt (rgt) # index_projects_on_status (status) # index_projects_on_updated_on (updated_on) -# index_projects_on_user_id (user_id) # class Project < ApplicationRecord @@ -138,6 +135,7 @@ class Project < ApplicationRecord has_many :commit_logs, dependent: :destroy has_many :daily_project_statistics, dependent: :destroy has_one :project_dataset, dependent: :destroy + has_many :sync_repositories, dependent: :destroy after_create :incre_user_statistic, :incre_platform_statistic after_save :check_project_members before_save :set_invite_code, :reset_unmember_followed, :set_recommend_and_is_pinned, :reset_cache_data diff --git a/app/models/sync_repository_branch.rb b/app/models/sync_repository_branch.rb index 5e10dfa1..f23f5fe3 100644 --- a/app/models/sync_repository_branch.rb +++ b/app/models/sync_repository_branch.rb @@ -11,6 +11,7 @@ # reposync_branch_id :integer # created_at :datetime not null # updated_at :datetime not null +# enable :boolean default("1") # # Indexes # diff --git a/app/views/api/v1/projects/sync_repositories/branches.json.jbuilder b/app/views/api/v1/projects/sync_repositories/branches.json.jbuilder new file mode 100644 index 00000000..5a2c41aa --- /dev/null +++ b/app/views/api/v1/projects/sync_repositories/branches.json.jbuilder @@ -0,0 +1,11 @@ +json.total_count @group_sync_repository_branch.keys.count +json.sync_repository_branches @group_sync_repository_branch.each do |key| + json.gitlink_branch_name key[0][0] + json.external_branch_name key[0][1] + branches = @sync_repository_branches.where(gitlink_branch_name: key[0][0], external_branch_name: key[0][1]) + branch = branches.last + json.sync_time branch.sync_time + json.sync_status branch.sync_status + json.enable branch.enable + json.reposync_branch_ids branches.pluck(:reposync_branch_id) +end \ No newline at end of file diff --git a/app/views/api/v1/projects/sync_repositories/index.json.jbuilder b/app/views/api/v1/projects/sync_repositories/index.json.jbuilder new file mode 100644 index 00000000..f709bd33 --- /dev/null +++ b/app/views/api/v1/projects/sync_repositories/index.json.jbuilder @@ -0,0 +1,7 @@ +json.total_count @group_sync_repository.keys.count +json.sync_repositories @group_sync_repository.each do |key| + json.type key[0][0] + json.external_repo_address key[0][1] + json.sync_granularity key[0][2] + json.sync_repository_ids @sync_repositories.where(type: key[0][0], external_repo_address: key[0][1], sync_granularity: key[0][2]).pluck(:id) +end \ No newline at end of file diff --git a/config/routes/api.rb b/config/routes/api.rb index 6c0aa48c..d0296748 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -78,9 +78,10 @@ defaults format: :json do # projects文件夹下的 scope module: :projects do - resources :sync_repositories, only: [:create] do + resources :sync_repositories, only: [:create, :index] do collection do post :sync + get :branches end end resource :dataset, only: [:create, :update, :show] diff --git a/db/migrate/20240417025003_add_enable_to_sync_repository_branch.rb b/db/migrate/20240417025003_add_enable_to_sync_repository_branch.rb new file mode 100644 index 00000000..fdbd7b7e --- /dev/null +++ b/db/migrate/20240417025003_add_enable_to_sync_repository_branch.rb @@ -0,0 +1,5 @@ +class AddEnableToSyncRepositoryBranch < ActiveRecord::Migration[5.2] + def change + add_column :sync_repository_branches, :enable, :boolean, default: true + end +end