From d5807c0df007e611c19f9ab5cd7e25e4a7b96f9e Mon Sep 17 00:00:00 2001 From: chenjing Date: Thu, 15 Jun 2023 17:45:07 +0800 Subject: [PATCH] cla send issue journal --- .../organizations/clas_controller.rb | 1 + app/controllers/pull_requests_controller.rb | 1 + .../pull_requests/send_journal_service.rb | 32 +++++++++++++++++++ 3 files changed, 34 insertions(+) create mode 100644 app/services/pull_requests/send_journal_service.rb diff --git a/app/controllers/organizations/clas_controller.rb b/app/controllers/organizations/clas_controller.rb index 953cc9d5c..ae88ee2f1 100644 --- a/app/controllers/organizations/clas_controller.rb +++ b/app/controllers/organizations/clas_controller.rb @@ -1,6 +1,7 @@ class Organizations::ClasController < Organizations::BaseController before_action :load_organization before_action :load_cla, only: [:show, :update, :destroy] + before_action :check_user_can_edit_org, only: [:create, :update, :destroy] def index @cla = @organization.cla diff --git a/app/controllers/pull_requests_controller.rb b/app/controllers/pull_requests_controller.rb index 0cf022f7c..037e201bf 100644 --- a/app/controllers/pull_requests_controller.rb +++ b/app/controllers/pull_requests_controller.rb @@ -67,6 +67,7 @@ class PullRequestsController < ApplicationController Issues::CreateForm.new({subject: params[:title], description: params[:body].blank? ? params[:body] : params[:body].b}).validate! @pull_request, @gitea_pull_request = PullRequests::CreateService.call(current_user, @owner, @project, params) if @gitea_pull_request[:status] == :success + PullRequests::SendJournalService.call(@project, @pull_request, current_user) @pull_request.bind_gitea_pull_request!(@gitea_pull_request[:body]["number"], @gitea_pull_request[:body]["id"]) reviewers = User.where(id: params[:reviewer_ids]) @pull_request.reviewers = reviewers diff --git a/app/services/pull_requests/send_journal_service.rb b/app/services/pull_requests/send_journal_service.rb new file mode 100644 index 000000000..16e14ca2b --- /dev/null +++ b/app/services/pull_requests/send_journal_service.rb @@ -0,0 +1,32 @@ +class PullRequests::SendJournalService < ApplicationService + + def initialize(project, pull_request,current_user) + @project = project + @issue = pull_request + @current_user = current_user + @org = project.owner + end + + def call + if @org.enabling_cla && @org.cla.present? && @org.cla.pr_need && !@org.is_member?(@current_user&.id) + ActiveRecord::Base.transaction do + sender_id = if Rails.env.development? + User.last.id + else + 87461 + end + journal_params = { + journalized_id: @issue.id , + journalized_type: "Issue", + user_id: sender_id , + notes: "@xxx 您好!欢迎参与 #{@project.name} 的贡献。首次进行贡献请完成《#{@project.owner.cla.name}》的签署,签署完成后,项目成员才可查看到您的合并请求", + } + journal = Journal.new journal_params + if journal.save + TouchWebhookJob.set(wait: 5.seconds).perform_later('PullRequestComment', @issue&.id, sender_id, journal.id, 'created', {}) + push_activity_2_blockchain("issue_comment_create", journal) if Site.has_blockchain? && @project.use_blockchain + end + end + end + end +end