新增:合并请求关联疑修逻辑
This commit is contained in:
parent
a0d4f2f404
commit
18156ffd8d
|
@ -127,6 +127,18 @@ class PullRequestsController < ApplicationController
|
|||
return normal_status(-1, "请输入正确的标记。")
|
||||
end
|
||||
end
|
||||
if params[:attached_issue_ids].present?
|
||||
if params[:attached_issue_ids].is_a?(Array) && params[:attached_issue_ids].size > 1
|
||||
return normal_status(-1, "最多只能关联一个疑修。")
|
||||
elsif params[:attached_issue_ids].is_a?(Array) && params[:attached_issue_ids].size == 1
|
||||
@pull_request&.pull_attached_issues&.destroy_all
|
||||
params[:attached_issue_ids].each do |issue|
|
||||
PullAttachedIssue.create!(issue_id: issue, pull_request_id: @pull_request.id)
|
||||
end
|
||||
else
|
||||
return normal_status(-1, "请输入正确的疑修。")
|
||||
end
|
||||
end
|
||||
if params[:status_id].to_i == 5
|
||||
@issue.issue_times.update_all(end_time: Time.now)
|
||||
end
|
||||
|
@ -214,35 +226,15 @@ class PullRequestsController < ApplicationController
|
|||
push_activity_2_blockchain("pull_request_merge", @pull_request)
|
||||
|
||||
# 查看是否fix了相关issue,如果fix就转账
|
||||
if params["fix_issue_id"].nil? || params["fix_issue_id"] == ""
|
||||
else
|
||||
issue = Issue.find_by(id: params["fix_issue_id"])
|
||||
if issue.nil?
|
||||
normal_status(-1, "关联issue失败")
|
||||
raise ActiveRecord::Rollback
|
||||
else
|
||||
token_num = issue.blockchain_token_num
|
||||
token_num = token_num.nil? ? 0 : token_num
|
||||
owner = User.find_by(login: params["owner"])
|
||||
pr = PullRequest.find_by(id: params["pull_request"]["id"])
|
||||
if owner.nil? || pr.nil?
|
||||
normal_status(-1, "关联issue失败")
|
||||
raise ActiveRecord::Rollback
|
||||
else
|
||||
project = Project.find_by(user_id: owner.id, identifier: params["project_id"])
|
||||
if project.nil?
|
||||
normal_status(-1, "关联issue失败")
|
||||
raise ActiveRecord::Rollback
|
||||
else
|
||||
author_id = pr.user_id
|
||||
if token_num > 0
|
||||
Blockchain::FixIssue.call({user_id: author_id.to_s, project_id: project.id.to_s, token_num: token_num})
|
||||
end
|
||||
# update issue to state 5
|
||||
issue.update(status_id: 5)
|
||||
end
|
||||
end
|
||||
@pull_request.attached_issues.each do |issue|
|
||||
token_num = issue.blockchain_token_num
|
||||
token_num = token_num.nil? ? 0 : token_num
|
||||
author_id = @pull_request.user_id
|
||||
if token_num > 0
|
||||
Blockchain::FixIssue.call({user_id: author_id.to_s, project_id: project.id.to_s, token_num: token_num})
|
||||
end
|
||||
# update issue to state 5
|
||||
issue.update(status_id: 5)
|
||||
end
|
||||
|
||||
# 合并请求下issue处理为关闭
|
||||
|
|
|
@ -79,6 +79,8 @@ class Issue < ApplicationRecord
|
|||
|
||||
has_many :comment_journals, -> {where.not(notes: nil)}, class_name: "Journal", :as => :journalized
|
||||
has_many :operate_journals, -> {where(notes: nil)}, class_name: "Journal", :as => :journalized
|
||||
has_many :pull_attached_issues, dependent: :destroy
|
||||
has_many :attach_pull_requests, through: :pull_attached_issues, source: :pull_request
|
||||
|
||||
scope :issue_includes, ->{includes(:user)}
|
||||
scope :issue_many_includes, ->{includes(journals: :user)}
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
# == Schema Information
|
||||
#
|
||||
# Table name: pull_attached_issues
|
||||
#
|
||||
# id :integer not null, primary key
|
||||
# pull_request_id :integer
|
||||
# issue_id :integer
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
#
|
||||
# Indexes
|
||||
#
|
||||
# index_pull_attached_issues_on_issue_id (issue_id)
|
||||
# index_pull_attached_issues_on_pull_request_id (pull_request_id)
|
||||
#
|
||||
|
||||
class PullAttachedIssue < ApplicationRecord
|
||||
|
||||
belongs_to :pull_request
|
||||
belongs_to :issue
|
||||
|
||||
end
|
|
@ -44,6 +44,8 @@ class PullRequest < ApplicationRecord
|
|||
has_many :pull_requests_reviewers, dependent: :destroy
|
||||
has_many :reviewers, through: :pull_requests_reviewers
|
||||
has_many :mark_files, dependent: :destroy
|
||||
has_many :pull_attached_issues, dependent: :destroy
|
||||
has_many :attached_issues, through: :pull_attached_issues, source: :issue
|
||||
|
||||
scope :merged_and_closed, ->{where.not(status: 0)}
|
||||
scope :opening, -> {where(status: 0)}
|
||||
|
|
|
@ -20,6 +20,7 @@ class PullRequests::CreateService < ApplicationService
|
|||
save_tiding!
|
||||
save_project_trend!
|
||||
save_custom_journal_detail!
|
||||
save_pull_attached_issues!
|
||||
end
|
||||
|
||||
[pull_request, gitea_pull_request]
|
||||
|
@ -111,6 +112,20 @@ class PullRequests::CreateService < ApplicationService
|
|||
end
|
||||
end
|
||||
|
||||
def save_pull_attached_issues!
|
||||
if attached_issue_ids.size > 1
|
||||
raise "最多只能关联一个疑修。"
|
||||
else
|
||||
attached_issue_ids.each do |issue|
|
||||
PullAttachedIssue.create!(issue_id: issue, pull_request_id: pull_request&.id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def issue_tag_ids
|
||||
Array(@params[:attached_issue_ids])
|
||||
end
|
||||
|
||||
def gitea_pull_request
|
||||
@gitea_pull_request ||= create_gitea_pull_request!
|
||||
end
|
||||
|
|
|
@ -0,0 +1,10 @@
|
|||
class CreatePullAttachedIssues < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
create_table :pull_attached_issues do |t|
|
||||
t.references :pull_request
|
||||
t.references :issue
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue