class Api::V1::Issues::BatchDeleteService < ApplicationService include ActiveModel::Model attr_reader :project, :issues, :current_user validates :project, :issues, :current_user, presence: true def initialize(project, issues, current_user = nil) @project = project @issues = issues.includes(:assigners) @current_user = current_user end def call raise Error, errors.full_messages.join(", ") unless valid? try_lock("Api::V1::Issues::DeleteService:#{project.id}") # 开始写数据,加锁 delete_issues project.incre_project_issue_cache_delete_count(@issues.size) if Site.has_notice_menu? && !project.id.zero? @issues.each do |issue| SendTemplateMessageJob.perform_later('IssueDeleted', current_user.id, @issue&.subject, @issue.assigners.pluck(:id), @issue.author_id) end end unlock("Api::V1::Issues::DeleteService:#{project.id}") return true end private def delete_issues raise Error, "批量删除疑修失败!" unless @issues.destroy_all end end