新增:重新打开pr接口

This commit is contained in:
yystopf 2025-06-23 19:27:47 +08:00
parent 880f547b3b
commit 6a7174781c
6 changed files with 101 additions and 1 deletions

View File

@ -6,13 +6,22 @@ class Api::V1::Projects::Pulls::PullsController < Api::V1::BaseController
@pulls = kaminari_paginate(@pulls)
end
before_action :load_pull_request, only: [:show, :files]
before_action :load_pull_request, only: [:show, :reopen, :files]
def show
@result_object = Api::V1::Projects::Pulls::GetService.call(@project, @pull_request, current_user&.gitea_token)
@last_review = @pull_request.reviews.order(created_at: :desc).take
end
def reopen
@result_object = Api::V1::Projects::Pulls::ReopenService.call(@project, @pull_request, current_user)
if @result_object
render_ok
else
render_error("合并请求重新打开失败!")
end
end
def files
if params[:filepath].present?
@result_object = $gitea_hat_client.get_repos_pulls_files_by_owner_repo_index_filepath(@project&.owner.login, @project&.identifier, @pull_request.gitea_number, CGI.escape(params[:filepath]), {query: {token: current_user&.gitea_token}})

View File

@ -144,6 +144,18 @@ class PullRequest < ApplicationRecord
"#{Rails.application.config_for(:configuration)['platform_url']}/#{self.project.owner.login}/#{self.project.name}/pulls/#{self.id}"
end
def closed?
self.status == CLOSED
end
def merged?
self.status == MERGED
end
def opened?
self.status == OPEN
end
def pr_status
case status
when 0

View File

@ -0,0 +1,39 @@
class Api::V1::Projects::Pulls::ReopenService < ApplicationService
include ActiveModel::Model
attr_reader :project, :pull_request, :issue, :user
def initialize(project, pull_request, user)
@project = project
@pull_request = pull_request
@issue = pull_request&.issue
@user = user
end
def call
raise Error, errors.full_messages.join(", ") unless valid?
if gitea_change_status
@pull_request.update_column(:status, PullRequest::OPEN)
@pull_request&.project_trends&.where(action_type: ProjectTrend::CLOSE).destroy_all
@issue.update_column(:status_id, IssueStatus::ADD)
return true
else
raise Error, 'gitea change status failed'
end
end
private
def valid?
return false if @project.blank? || @pull_request.blank? || @issue.blank? || @user.blank?
return false unless @pull_request.closed?
return true
end
def gitea_change_status
gitea_result = Gitea::PullRequest::ChangeStatusService.call(@project.owner.login, @project.identifier, @pull_request.gitea_number, false, @user&.gitea_token)
return true if gitea_result[:status] == :success
return false
end
end

View File

@ -0,0 +1,38 @@
# Get a pull request
class Gitea::PullRequest::ChangeStatusService < Gitea::ClientService
attr_reader :owner, :repo, :number, :is_closed, :token
#eq:
# Gitea::PullRequest::ChangeStatusService.call(user.login, repository.identifier, pull.gitea_number, true, user.gitea_token)
def initialize(owner, repo, number, is_closed, token=nil)
@owner = owner
@repo = repo
@number = number
@is_closed = is_closed
@token = token
end
def call
response = get(url, request_params, true)
status, message, body = render_response(response)
json_format(status, message, body)
end
private
def request_params
Hash.new.merge(token: token, is_closed: is_closed)
end
def url
"/repos/#{owner}/#{repo}/pulls/#{number}/change_status".freeze
end
def json_format(status, message, body)
case status
when 204 then success(body)
else
error(message, status)
end
end
end

View File

@ -7,6 +7,7 @@ json.commits_count @gitea_pull["commit_num"]
json.files_count @gitea_pull["changed_files"]
json.comments_count @issue.journals.parent_journals.size
json.comments_total_count @issue.get_journals_size
json.can_reopen @pull_request.closed?
json.assign_user do
json.partial! 'users/user_simple', user: @issue_assign_to
end

View File

@ -203,6 +203,7 @@ defaults format: :json do
resources :pulls, module: 'pulls' do
member do
get :files
post :reopen
end
resources :versions, only: [:index] do
member do