diff --git a/app/controllers/api/v1/projects/branches_controller.rb b/app/controllers/api/v1/projects/branches_controller.rb index 40f44fea5..06d426b3f 100644 --- a/app/controllers/api/v1/projects/branches_controller.rb +++ b/app/controllers/api/v1/projects/branches_controller.rb @@ -9,7 +9,7 @@ class Api::V1::Projects::BranchesController < Api::V1::BaseController @result_object = Api::V1::Projects::Branches::AllListService.call(@project, current_user&.gitea_token) end - before_action :require_operate_above, only: [:create, :destroy] + before_action :require_operate_above, only: [:create, :destroy, :restore] def create @result_object = Api::V1::Projects::Branches::CreateService.call(@project, branch_params, current_user&.gitea_token) @@ -33,6 +33,15 @@ class Api::V1::Projects::BranchesController < Api::V1::BaseController end end + def restore + @result_object = Api::V1::Projects::Branches::RestoreService.call(@project, params[:branch_id], params[:branch_name], current_user&.gitea_token) + if @result_object + return render_ok + else + return render_error('恢复分支失败!') + end + end + before_action :require_manager_above, only: [:update_default_branch] def update_default_branch diff --git a/app/services/api/v1/projects/branches/list_service.rb b/app/services/api/v1/projects/branches/list_service.rb index 590c4884f..b049bb2ac 100644 --- a/app/services/api/v1/projects/branches/list_service.rb +++ b/app/services/api/v1/projects/branches/list_service.rb @@ -18,7 +18,6 @@ class Api::V1::Projects::Branches::ListService < ApplicationService load_default_branch @gitea_data[:default_branch] = @gitea_repo_data["default_branch"] - @gitea_data end diff --git a/app/services/api/v1/projects/branches/restore_service.rb b/app/services/api/v1/projects/branches/restore_service.rb new file mode 100644 index 000000000..fbd6220ed --- /dev/null +++ b/app/services/api/v1/projects/branches/restore_service.rb @@ -0,0 +1,47 @@ +class Api::V1::Projects::Branches::RestoreService < ApplicationService + + include ActiveModel::Model + + attr_accessor :project, :token, :owner, :repo, :branch_id, :branch_name + attr_accessor :gitea_data + + validates :branch_id, :branch_name, presence: true + + def initialize(project, branch_id, branch_name, token= nil) + @project = project + @owner = project&.owner&.login + @repo = project&.identifier + @branch_id = branch_id + @branch_name = branch_name + @token = token + end + + def call + raise Error, errors.full_messages.join(",") unless valid? + excute_data_to_gitea + + true + end + + private + def request_params + { + access_token: token + } + end + + def request_body + { + branch_id: branch_id, + name: branch_name, + } + end + + def excute_data_to_gitea + begin + @gitea_data = $gitea_hat_client.post_repos_branches_restore_by_owner_repo(owner, repo, {query: request_params, body: request_body.to_json}) + rescue => e + raise Error, '恢复分支失败!' + end + end +end \ No newline at end of file diff --git a/app/views/api/v1/projects/branches/_simple_gitea_detail.json.jbuilder b/app/views/api/v1/projects/branches/_simple_gitea_detail.json.jbuilder index c9235bdb4..ff0f0618a 100644 --- a/app/views/api/v1/projects/branches/_simple_gitea_detail.json.jbuilder +++ b/app/views/api/v1/projects/branches/_simple_gitea_detail.json.jbuilder @@ -23,4 +23,14 @@ json.commit_time branch['commit']['timestamp'] json.default_branch default_branch || nil json.http_url render_http_url(@project) json.zip_url render_zip_url(@owner, @project.repository, branch['name']) -json.tar_url render_tar_url(@owner, @project.repository, branch['name']) \ No newline at end of file +json.tar_url render_tar_url(@owner, @project.repository, branch['name']) +json.branch_id branch['id'] +json.is_deleted branch['is_deleted'] +json.deleted_unix branch['deleted_unix'] +json.deleted_by do + if branch['is_deleted'] + json.partial! 'api/v1/users/commit_user', locals: { user: render_cache_commit_author(branch['deleted_by']), name: branch['deleted_by']['name'] } + else + json.nil! + end +end \ No newline at end of file diff --git a/config/routes/api.rb b/config/routes/api.rb index f3fa24de8..1133c8b36 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -80,6 +80,7 @@ defaults format: :json do resources :branches, param: :name, only:[:index, :create, :destroy] do collection do get :all + post :restore patch :update_default_branch end end