新增:新合并请求列表接口
This commit is contained in:
parent
1feb166fd5
commit
5db43bf768
|
@ -2,6 +2,7 @@ class Api::V1::BaseController < ApplicationController
|
||||||
|
|
||||||
include Api::ProjectHelper
|
include Api::ProjectHelper
|
||||||
include Api::UserHelper
|
include Api::UserHelper
|
||||||
|
include Api::PullHelper
|
||||||
|
|
||||||
# before_action :doorkeeper_authorize!
|
# before_action :doorkeeper_authorize!
|
||||||
# skip_before_action :user_setup
|
# skip_before_action :user_setup
|
||||||
|
|
|
@ -2,19 +2,4 @@ class Api::V1::Projects::Pulls::BaseController < Api::V1::BaseController
|
||||||
before_action :require_public_and_member_above
|
before_action :require_public_and_member_above
|
||||||
before_action :load_pull_request
|
before_action :load_pull_request
|
||||||
|
|
||||||
def load_pull_request
|
|
||||||
pull_request_id = params[:pull_id] || params[:id]
|
|
||||||
@pull_request = @project.pull_requests.where(gitea_number: pull_request_id).where.not(id: pull_request_id).take || PullRequest.find_by_id(pull_request_id)
|
|
||||||
@issue = @pull_request&.issue
|
|
||||||
if @pull_request
|
|
||||||
logger.info "###########pull_request founded"
|
|
||||||
@pull_request
|
|
||||||
else
|
|
||||||
logger.info "###########pull_request not found"
|
|
||||||
@pull_request = nil
|
|
||||||
render_not_found and return
|
|
||||||
end
|
|
||||||
|
|
||||||
@pull_request
|
|
||||||
end
|
|
||||||
end
|
end
|
|
@ -0,0 +1,2 @@
|
||||||
|
class Api::V1::Projects::Pulls::CommentsController < Api::V1::Projects::Pulls::BaseController
|
||||||
|
end
|
|
@ -0,0 +1,7 @@
|
||||||
|
class Api::V1::Projects::Pulls::ReviewsController < Api::V1::Projects::Pulls::BaseController
|
||||||
|
|
||||||
|
def index
|
||||||
|
@reviews = @pull_request.reviews
|
||||||
|
@reviews = kaminari_paginate(@reviews)
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,19 @@
|
||||||
|
class Api::V1::Projects::PullsController < Api::V1::BaseController
|
||||||
|
before_action :require_public_and_member_above
|
||||||
|
|
||||||
|
def index
|
||||||
|
@pulls = Api::V1::Projects::Pulls::ListService.call(@project, query_params)
|
||||||
|
@pulls = kaminari_paginate(@pulls)
|
||||||
|
end
|
||||||
|
|
||||||
|
before_action :load_pull_request, only: [:show]
|
||||||
|
|
||||||
|
def show
|
||||||
|
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def query_params
|
||||||
|
params.permit(:status, :keyword, :priority_id, :issue_tag_id, :version_id, :reviewer_id, :sort_by, :sort_direction)
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,19 @@
|
||||||
|
module Api::PullHelper
|
||||||
|
extend ActiveSupport::Concern
|
||||||
|
|
||||||
|
def load_pull_request
|
||||||
|
pull_request_id = params[:pull_id] || params[:id]
|
||||||
|
@pull_request = @project.pull_requests.where(gitea_number: pull_request_id).where.not(id: pull_request_id).take || PullRequest.find_by_id(pull_request_id)
|
||||||
|
@issue = @pull_request&.issue
|
||||||
|
if @pull_request
|
||||||
|
logger.info "###########pull_request founded"
|
||||||
|
@pull_request
|
||||||
|
else
|
||||||
|
logger.info "###########pull_request not found"
|
||||||
|
@pull_request = nil
|
||||||
|
render_not_found and return
|
||||||
|
end
|
||||||
|
|
||||||
|
@pull_request
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,46 @@
|
||||||
|
class Api::V1::Projects::Pulls::ListService < ApplicationService
|
||||||
|
include ActiveModel::Model
|
||||||
|
|
||||||
|
attr_reader :project, :keyword, :status, :priority_id, :issue_tag_id, :version_id, :reviewer_id, :sort_by, :sort_direction
|
||||||
|
attr_accessor :queried_pull_requests
|
||||||
|
|
||||||
|
validates :status, inclusion: {in: [0, 1, 2], message: "请输入正确的Status"}, allow_nil: true
|
||||||
|
validates :sort_by, inclusion: {in: PullRequest.column_names, message: '请输入正确的SortBy'}
|
||||||
|
validates :sort_direction, inclusion: {in: %w(asc desc), message: '请输入正确的SortDirection'}
|
||||||
|
|
||||||
|
def initialize(project, params={})
|
||||||
|
@project = project
|
||||||
|
@keyword = params[:keyword]
|
||||||
|
@status = params[:status].to_i
|
||||||
|
@priority_id = params[:priority_id]
|
||||||
|
@issue_tag_id = params[:issue_tag_id]
|
||||||
|
@version_id = params[:version_id]
|
||||||
|
@reviewer_id = params[:reviewer_id]
|
||||||
|
@sort_by = params[:sort_by] || 'created_at'
|
||||||
|
@sort_direction = params[:sort_direction] || 'desc'
|
||||||
|
end
|
||||||
|
|
||||||
|
def call
|
||||||
|
raise Error, errors.full_messages.join(",") unless valid?
|
||||||
|
pull_request_query_data
|
||||||
|
|
||||||
|
queried_pull_requests
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
def pull_request_query_data
|
||||||
|
pull_requests = @project.pull_requests
|
||||||
|
|
||||||
|
pull_requests = pull_requests.where(status: status) if status.present?
|
||||||
|
pull_requests = pull_requests.where(issues: {priority_id: priority_id}) if priority_id.present?
|
||||||
|
pull_requests = pull_requests.where(issue_tags: {id: issue_tag_id}) if issue_tag_id.present?
|
||||||
|
pull_requests = pull_requests.where(issues: {fixed_version_id: version_id}) if version_id.present?
|
||||||
|
pull_requests = pull_requests.where(users: {id: reviewer_id}) if reviewer_id.present?
|
||||||
|
|
||||||
|
q = pull_requests.ransack(title_or_body_cont: keyword)
|
||||||
|
scope = q.result.includes(:fork_project, :journals, :reviews, :reviewers, issue: [:journals, :priority, :version, :issue_tags])
|
||||||
|
scope = scope.order("pull_requests.#{sort_by} #{sort_direction}")
|
||||||
|
|
||||||
|
@queried_pull_requests = scope
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,25 @@
|
||||||
|
json.(pull, :id, :head, :base, :is_original)
|
||||||
|
json.index pull.gitea_number
|
||||||
|
json.status pull.status == 1 ? "merged" : (pull.status == 2 ? "closed" : "open")
|
||||||
|
|
||||||
|
fork_project = pull&.fork_project
|
||||||
|
if fork_project.present?
|
||||||
|
json.fork_project do
|
||||||
|
json.(fork_project, :id, :identifier)
|
||||||
|
json.login fork_project&.owner&.login
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
issue = pull&.issue
|
||||||
|
json.issue do
|
||||||
|
json.id issue&.id
|
||||||
|
json.author do
|
||||||
|
json.partial! '/api/v1/users/simple_user', user: issue&.user
|
||||||
|
end
|
||||||
|
json.priority issue&.priority.try(:name)
|
||||||
|
json.version issue&.version.try(:name)
|
||||||
|
json.comments_count issue.journals.count
|
||||||
|
json.issue_tags issue.get_issue_tags
|
||||||
|
end
|
||||||
|
|
||||||
|
json.comments_count pull.journals.count
|
|
@ -0,0 +1,4 @@
|
||||||
|
json.total_count @pulls.total_count
|
||||||
|
json.pulls @pulls.each do |pull|
|
||||||
|
json.partial! 'api/v1/projects/pulls/simple_detail', pull: pull
|
||||||
|
end
|
Loading…
Reference in New Issue