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.
35 lines
855 B
35 lines
855 B
class PrivateMessages::CreateService < ApplicationService
|
|
Error = Class.new(StandardError)
|
|
|
|
attr_reader :sender, :receiver, :params
|
|
|
|
def initialize(sender, receiver, **params)
|
|
@sender = sender
|
|
@receiver = receiver
|
|
@params = params
|
|
end
|
|
|
|
def call
|
|
validate!
|
|
|
|
same_attr = { sender: sender, receiver: receiver, content: content, send_time: Time.now }
|
|
|
|
message = nil
|
|
ActiveRecord::Base.transaction do
|
|
message = sender.private_messages.create!(same_attr.merge(target: receiver, status: 1))
|
|
receiver.private_messages.create!(same_attr.merge(target: sender, status: 0))
|
|
end
|
|
message
|
|
end
|
|
|
|
private
|
|
|
|
def content
|
|
@_content ||= params[:content].to_s.strip
|
|
end
|
|
|
|
def validate!
|
|
raise Error, '内容不能为空' if content.blank?
|
|
raise Error, '内容太长' if content.size > 255
|
|
end
|
|
end |