|
|
|
@@ -0,0 +1,107 @@ |
|
|
|
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 |