forked from Trustie/forgeplus
新增:重新打开pr接口
This commit is contained in:
parent
880f547b3b
commit
6a7174781c
|
@ -6,13 +6,22 @@ class Api::V1::Projects::Pulls::PullsController < Api::V1::BaseController
|
||||||
@pulls = kaminari_paginate(@pulls)
|
@pulls = kaminari_paginate(@pulls)
|
||||||
end
|
end
|
||||||
|
|
||||||
before_action :load_pull_request, only: [:show, :files]
|
before_action :load_pull_request, only: [:show, :reopen, :files]
|
||||||
|
|
||||||
def show
|
def show
|
||||||
@result_object = Api::V1::Projects::Pulls::GetService.call(@project, @pull_request, current_user&.gitea_token)
|
@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
|
@last_review = @pull_request.reviews.order(created_at: :desc).take
|
||||||
end
|
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
|
def files
|
||||||
if params[:filepath].present?
|
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}})
|
@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}})
|
||||||
|
|
|
@ -144,6 +144,18 @@ class PullRequest < ApplicationRecord
|
||||||
"#{Rails.application.config_for(:configuration)['platform_url']}/#{self.project.owner.login}/#{self.project.name}/pulls/#{self.id}"
|
"#{Rails.application.config_for(:configuration)['platform_url']}/#{self.project.owner.login}/#{self.project.name}/pulls/#{self.id}"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def closed?
|
||||||
|
self.status == CLOSED
|
||||||
|
end
|
||||||
|
|
||||||
|
def merged?
|
||||||
|
self.status == MERGED
|
||||||
|
end
|
||||||
|
|
||||||
|
def opened?
|
||||||
|
self.status == OPEN
|
||||||
|
end
|
||||||
|
|
||||||
def pr_status
|
def pr_status
|
||||||
case status
|
case status
|
||||||
when 0
|
when 0
|
||||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -7,6 +7,7 @@ json.commits_count @gitea_pull["commit_num"]
|
||||||
json.files_count @gitea_pull["changed_files"]
|
json.files_count @gitea_pull["changed_files"]
|
||||||
json.comments_count @issue.journals.parent_journals.size
|
json.comments_count @issue.journals.parent_journals.size
|
||||||
json.comments_total_count @issue.get_journals_size
|
json.comments_total_count @issue.get_journals_size
|
||||||
|
json.can_reopen @pull_request.closed?
|
||||||
json.assign_user do
|
json.assign_user do
|
||||||
json.partial! 'users/user_simple', user: @issue_assign_to
|
json.partial! 'users/user_simple', user: @issue_assign_to
|
||||||
end
|
end
|
||||||
|
|
|
@ -203,6 +203,7 @@ defaults format: :json do
|
||||||
resources :pulls, module: 'pulls' do
|
resources :pulls, module: 'pulls' do
|
||||||
member do
|
member do
|
||||||
get :files
|
get :files
|
||||||
|
post :reopen
|
||||||
end
|
end
|
||||||
resources :versions, only: [:index] do
|
resources :versions, only: [:index] do
|
||||||
member do
|
member do
|
||||||
|
|
Loading…
Reference in New Issue