diff --git a/Gemfile b/Gemfile index dd8885df7..c5f4f2ab6 100644 --- a/Gemfile +++ b/Gemfile @@ -135,4 +135,4 @@ gem 'doorkeeper' gem 'doorkeeper-jwt' -gem 'gitea-client', '~> 0.10.4' \ No newline at end of file +gem 'gitea-client', '~> 0.10.5' \ No newline at end of file diff --git a/app/controllers/api/v1/projects/pulls/reviews_controller.rb b/app/controllers/api/v1/projects/pulls/reviews_controller.rb index ccb637838..523137a86 100644 --- a/app/controllers/api/v1/projects/pulls/reviews_controller.rb +++ b/app/controllers/api/v1/projects/pulls/reviews_controller.rb @@ -13,7 +13,6 @@ class Api::V1::Projects::Pulls::ReviewsController < Api::V1::Projects::Pulls::Ba private def require_reviewer - puts @pull_request.reviewers.exists?(current_user.id) return render_forbidden('您没有审查权限,请联系项目管理员') if !current_user.admin? && !@pull_request.reviewers.exists?(current_user.id) end diff --git a/app/controllers/api/v1/projects/pulls_controller.rb b/app/controllers/api/v1/projects/pulls_controller.rb index fe39b2ad9..a930df760 100644 --- a/app/controllers/api/v1/projects/pulls_controller.rb +++ b/app/controllers/api/v1/projects/pulls_controller.rb @@ -9,7 +9,8 @@ class Api::V1::Projects::PullsController < Api::V1::BaseController before_action :load_pull_request, only: [:show] def show - + @result_object = Api::V1::Projects::Pulls::GetService.call(@project, @pull_request, current_user&.gitea_token) + @last_review = @pull_request.reviews.take end private diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index 52da4ac48..8bbfdc230 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -176,7 +176,7 @@ class PullRequestsController < ApplicationController @issue_assign_to = @issue.get_assign_user @gitea_pull = Gitea::PullRequest::GetService.call(@owner.login, @repository.identifier, @pull_request.gitea_number, current_user&.gitea_token) - @last_review = @pull_request.issue.reviews.take + @last_review = @pull_request.reviews.take end def pr_merge diff --git a/app/services/api/v1/projects/pulls/get_service.rb b/app/services/api/v1/projects/pulls/get_service.rb new file mode 100644 index 000000000..3c1bba99b --- /dev/null +++ b/app/services/api/v1/projects/pulls/get_service.rb @@ -0,0 +1,32 @@ +class Api::V1::Projects::Pulls::GetService < ApplicationService + + attr_reader :project, :pull_request, :owner, :repo, :index, :token + attr_accessor :gitea_data + + def initialize(project, pull_request, token = nil) + @project = project + @pull_request = pull_request + @owner = project&.owner.login + @repo = project&.identifier + @index = pull_request.gitea_number + @token = token + end + + def call + load_gitea_data + + gitea_data + end + + private + def request_params + { + access_token: token + } + end + + def load_gitea_data + @gitea_data = $gitea_client.get_repos_pulls_by_owner_repo_index(owner, repo, index, {query: request_params}) + # raise Error, '获取合并请求失败!' unless @gitea_data.is_a?(Hash) + end +end \ No newline at end of file diff --git a/app/views/api/v1/projects/pulls/show.json.jbuilder b/app/views/api/v1/projects/pulls/show.json.jbuilder new file mode 100644 index 000000000..fce27e17f --- /dev/null +++ b/app/views/api/v1/projects/pulls/show.json.jbuilder @@ -0,0 +1,29 @@ +json.partial! "api/v1/projects/pulls/simple_detail", pull: @pull_request +json.merge_base @result_object['merge_base'] +json.base_commit_sha @result_object['base']['sha'] +json.head_commit_sha @result_object['head']['sha'] +json.commit_num @result_object['commit_num'] +json.changed_files @result_object['changed_files'] +json.is_locked @result_object['is_locked'] +json.mergeable @result_object['mergeable'] # 是否能合并 +json.merged @result_object['merged'] +json.merged_at @result_object['merged_at'].nil? ? '' : render_unix_time( @result_object['merged_at']) +json.merge_commit_sha @result_object['merge_commit_sha'] +json.merge_by do + if @result_object['merged_by'] + json.partial! 'api/v1/users/commit_user', locals: { user: render_cache_commit_author(@result_object['merged_by']), name: @result_object['merged_by']['login'] } + else + json.nil! + end +end +json.last_review do + if @last_review.present? + json.(@last_review, :id, :commit_id, :content, :status) + json.created_at format_time(@last_review.created_at) + json.reviewer do + json.partial! "api/v1/users/simple_user", user: @last_review.reviewer + end + else + json.nil! + end +end \ No newline at end of file