You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
36 lines
935 B
36 lines
935 B
class ProjectPackages::AgreeApplyService < ApplicationService
|
|
Error = Class.new(StandardError)
|
|
|
|
attr_reader :apply, :package
|
|
|
|
def initialize(apply)
|
|
@apply = apply
|
|
@package = apply.project_package
|
|
end
|
|
|
|
def call
|
|
raise Error, '该状态下不能进行此操作' unless apply.may_agree? && package.may_publish?
|
|
|
|
ActiveRecord::Base.transaction do
|
|
apply.agree!
|
|
|
|
# 发布
|
|
package.publish
|
|
package.published_at = Time.now
|
|
package.save!
|
|
|
|
# 消息
|
|
send_agree_notify!
|
|
end
|
|
end
|
|
|
|
private
|
|
def send_agree_notify!
|
|
Tiding.where(container_id: package.id, container_type: 'ProjectPackage',
|
|
tiding_type: 'Apply', status: 0).update_all(status: 1)
|
|
|
|
Tiding.create!(user_id: package.creator_id, trigger_user_id: 1,
|
|
container_id: package.id, container_type: 'ProjectPackage',
|
|
tiding_type: 'System', status: 1)
|
|
end
|
|
end |