| @@ -127,6 +127,18 @@ class PullRequestsController < ApplicationController | |||||
| return normal_status(-1, "请输入正确的标记。") | return normal_status(-1, "请输入正确的标记。") | ||||
| end | end | ||||
| 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 | if params[:status_id].to_i == 5 | ||||
| @issue.issue_times.update_all(end_time: Time.now) | @issue.issue_times.update_all(end_time: Time.now) | ||||
| end | end | ||||
| @@ -214,35 +226,15 @@ class PullRequestsController < ApplicationController | |||||
| push_activity_2_blockchain("pull_request_merge", @pull_request) | push_activity_2_blockchain("pull_request_merge", @pull_request) | ||||
| # 查看是否fix了相关issue,如果fix就转账 | # 查看是否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 | end | ||||
| # update issue to state 5 | |||||
| issue.update(status_id: 5) | |||||
| end | end | ||||
| # 合并请求下issue处理为关闭 | # 合并请求下issue处理为关闭 | ||||
| @@ -79,6 +79,8 @@ class Issue < ApplicationRecord | |||||
| has_many :comment_journals, -> {where.not(notes: nil)}, class_name: "Journal", :as => :journalized | 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 :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_includes, ->{includes(:user)} | ||||
| scope :issue_many_includes, ->{includes(journals: :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 :pull_requests_reviewers, dependent: :destroy | ||||
| has_many :reviewers, through: :pull_requests_reviewers | has_many :reviewers, through: :pull_requests_reviewers | ||||
| has_many :mark_files, dependent: :destroy | 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 :merged_and_closed, ->{where.not(status: 0)} | ||||
| scope :opening, -> {where(status: 0)} | scope :opening, -> {where(status: 0)} | ||||
| @@ -20,6 +20,7 @@ class PullRequests::CreateService < ApplicationService | |||||
| save_tiding! | save_tiding! | ||||
| save_project_trend! | save_project_trend! | ||||
| save_custom_journal_detail! | save_custom_journal_detail! | ||||
| save_pull_attached_issues! | |||||
| end | end | ||||
| [pull_request, gitea_pull_request] | [pull_request, gitea_pull_request] | ||||
| @@ -111,6 +112,20 @@ class PullRequests::CreateService < ApplicationService | |||||
| end | end | ||||
| 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 | def gitea_pull_request | ||||
| @gitea_pull_request ||= create_gitea_pull_request! | @gitea_pull_request ||= create_gitea_pull_request! | ||||
| end | 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 | |||||