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