新增: 评论相关api根据需求重写

This commit is contained in:
2022-07-27 14:52:49 +08:00
parent a35db9fe80
commit d6b5dc326a
18 changed files with 432 additions and 17 deletions

View File

@@ -0,0 +1,48 @@
class Api::V1::Projects::Pulls::Journals::CreateService < ApplicationService
include ActiveModel::Model
attr_reader :project, :pull_request, :issue, :parent_id, :line_code, :note, :commit_id, :path, :type, :diff, :review_id, :user
attr_accessor :journal
validates :type, inclusion: {in: %w(comment problem), message: '请输入正确的Type'}
def initialize(project, pull_request, params, user)
@project = project
@pull_request = pull_request
@issue = pull_request&.issue
@parent_id = params[:parent_id]
@line_code = params[:line_code]
@note = params[:note]
@commit_id = params[:commit_id]
@path = params[:path]
@type = params[:type]
@diff = params[:diff]
@review_id = params[:review_id]
@user = user
end
def call
raise Error, errors.full_messages.join(", ") unless valid?
check_review_is_exists
if type == 'problem'
create_problem_journal
else
create_comment_journal
end
journal
end
private
def create_comment_journal
@journal = pull_request.journals.create!(user_id: user&.id, notes: note, parent_id: parent_id, review_id: review_id, commit_id: commit_id, diff: diff, line_code: line_code, path: path)
end
def check_review_is_exists
raise Error, '合并请求审查不存在!' unless @pull_request.reviews.exists?(review_id)
end
def create_problem_journal
@journal = pull_request.journals.create!(user_id: user&.id, notes: note, parent_id: parent_id, review_id: review_id, commit_id: commit_id, diff: diff, line_code: line_code, path: path, need_respond: true)
end
end

View File

@@ -0,0 +1,45 @@
class Api::V1::Projects::Pulls::Journals::ListService < ApplicationService
include ActiveModel::Model
attr_reader :project, :pull_request, :keyword, :review_id, :need_respond, :state, :sort_by, :sort_direction, :user
attr_accessor :queried_journals
validates :sort_by, inclusion: {in: Journal.column_names, message: '请输入正确的SortBy'}
validates :sort_direction, inclusion: {in: %w(asc desc), message: '请输入正确的SortDirection'}
validates :need_respond, inclusion: {in: [true, false], message: '请输入正确的NeedRespond'}, allow_nil: true
validates :state, inclusion: {in: %w(opened resolved disabled)}, allow_nil: true
def initialize(project, pull_request, params, user)
@project = project
@pull_request = pull_request
@keyword = params[:keyword]
@review_id = params[:review_id]
@need_respond = ActiveModel::Type::Boolean.new.cast(params[:need_respond])
@state = params[:state]
@sort_by = params[:sort_by] || 'created_on'
@sort_direction = params[:sort_direction] || 'asc'
@user = user
end
def call
raise Error, errors.full_messages.join(",") unless valid?
journal_query_data
queried_journals
end
private
def journal_query_data
journals = @pull_request.journals.parent_journals
journals = journals.where(review_id: review_id) if review_id.present?
journals = journals.where(need_respond: need_respond) if need_respond.present?
journals = journals.where(state: state) if state.present?
q = journals.ransack(notes_cont: keyword)
scope = q.result.includes(:review)
scope = scope.order("journals.#{sort_by} #{sort_direction}")
@queried_journals = scope
end
end

View File

@@ -0,0 +1,38 @@
class Api::V1::Projects::Pulls::Journals::UpdateService < ApplicationService
include ActiveModel::Model
attr_reader :project, :pull_request, :journal, :note, :commit_id, :state, :user
attr_accessor :updated_journal
validates :state, inclusion: {in: %w(opened resolved disabled)}
def initialize(project, pull_request, journal, params, user)
@project = project
@pull_request = pull_request
@journal = journal
@note = params[:note]
@commit_id = params[:commit_id]
@state = params[:state]
@user = user
end
def call
raise Error, errors.full_messages.join(", ") unless valid?
update_journal
updated_journal
end
private
def update_journal
journal.attributes = {notes: note, commit_id: commit_id, state: state}
if state == 'resolved'
journal.resolve_at = Time.now
journal.resolveer_id = user.id
end
return Error, '保存评论失败!' unless journal.save
@updated_journal = journal.reload
end
end

View File

@@ -20,10 +20,10 @@ class Api::V1::Projects::Pulls::Reviews::CreateService < ApplicationService
raise Error, errors.full_messages.join(", ") unless valid?
ActiveRecord::Base.transaction do
create_review
create_journal
# create_journal
end
return @journal, @review
@review
# rescue
# raise Error, '服务器错误,请联系系统管理员!'
end
@@ -33,8 +33,5 @@ class Api::V1::Projects::Pulls::Reviews::CreateService < ApplicationService
@review = pull_request.reviews.create!(status: status, content: content, commit_id: commit_id, reviewer_id: @current_user.id)
end
def create_journal
@journal = pull_request.journals.create!(notes: content, user_id: @current_user.id, review_id: @review.id)
end
end