gitlink-forgeplus/app/services/api/v1/issues/create_service.rb

107 lines
3.5 KiB
Ruby
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

class Api::V1::Issues::CreateService < ApplicationService
include ActiveModel::Model
attr_reader :project, :created_issue, :current_user
attr_reader :status_id, :priority_id, :milestone_id, :branch_name, :start_date, :due_date, :subject, :description
attr_reader :issue_tag_ids, :assigner_ids, :attachment_ids
validates :subject, presence: true
validates :status_id, :priority_id, presence: true
validates :current_user, presence: true
def initialize(project, params, current_user = nil)
@project = project
@current_user = current_user
@status_id = params[:status_id]
@priority_id = params[:priority_id]
@milestone_id = params[:milestone_id]
@branch_name = params[:branch_name]
@start_date = params[:start_date]
@due_date = params[:due_date]
@subject = params[:subject]
@description = params[:description]
@issue_tag_ids = params[:issue_tag_ids]
@assigner_ids = params[:assigner_ids]
@attachment_ids = params[:attachment_ids]
end
def call
raise Error, errors.full_messages.join(", ") unless valid?
begin
ActiveRecord::Base.transaction do
check_issue_status
check_issue_priority
check_milestone if milestone_id.present?
load_assigners unless assigner_ids.blank?
load_attachments unless attachment_ids.blank?
load_issue_tags unless issue_tag_ids.blank?
load_participants
@created_issue = Issue.new(issue_attributes)
@created_issue.assigners = @assigners unless assigner_ids.blank?
@created_issue.attachments = @attachments unless attachment_ids.blank?
@created_issue.issue_tags = @issue_tags unless issue_tag_ids.blank?
@created_issue.participants = @participants
@created_issue.save!
project.del_project_issue_cache_delete_count # 把缓存里存储项目删除issue的个数清除掉
end
return @created_issue
rescue
raise Error, "服务器错误,请联系系统管理员!"
end
end
private
def check_issue_status
raise Error, "IssueStatus不存在" unless IssueStatus.find_by_id(status_id).present?
end
def check_issue_priority
raise Error, "IssuePriority不存在" unless IssuePriority.find_by_id(priority_id).present?
end
def check_milestone
raise Error, "Milestone不存在" unless Version.find_by_id(milestone_id).present?
end
def load_assigners
@assigners = User.where(id: assigner_ids)
end
def load_issue_tags
@issue_tags = IssueTag.where(id: issue_tag_ids)
end
def load_attachments
@attachments = Attachment.where(id: attachment_ids)
end
def load_participants
@participants = User.where(id: assigner_ids).or(User.where(id: current_user.id))
end
def issue_attributes
issue_attributes = {
subject: subject,
project_id: project.id,
author_id: current_user.id,
tracker_id: Tracker.first.id,
status_id: status_id,
priority_id: priority_id,
project_issues_index: (project.get_last_project_issues_index + 1),
issue_type: "1",
issue_classify: "Issue"
}
issue_attributes.merge!({description: description}) if description.present?
issue_attributes.merge!({fixed_version_id: milestone_id}) if milestone_id.present?
issue_attributes.merge!({start_date: start_date}) if start_date.present?
issue_attributes.merge!({due_date: due_date}) if due_date.present?
issue_attributes.merge!({branch_name: branch_name}) if branch_name.present?
issue_attributes
end
end