新增:合并请求关联疑修逻辑

This commit is contained in:
yystopf 2023-03-02 15:55:46 +08:00
parent a0d4f2f404
commit 18156ffd8d
6 changed files with 71 additions and 28 deletions

View File

@ -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处理为关闭

View File

@ -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)}

View File

@ -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

View File

@ -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)}

View File

@ -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

View File

@ -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