Class: ChatSerializer

Inherits:
ActiveModel::Serializer
  • Object
show all
Defined in:
app/serializers/chat_serializer.rb

Instance Method Summary collapse

Instance Method Details

#last_messageObject



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'app/serializers/chat_serializer.rb', line 28

def last_message
  last_message = object.messages.last
  return nil unless last_message

  if last_message.body.blank? && last_message.attachments.any?
    attachment = last_message.attachments.last
    content_type = attachment.blob.content_type

    if content_type.start_with?("image/")
      "Image: " + attachment.blob.filename.to_s
    elsif content_type.start_with?("video/")
      "Video: " + attachment.blob.filename.to_s
    else
      attachment.blob.filename.to_s
    end
  else
    last_message.body
  end
end

#last_message_timeObject



48
49
50
# File 'app/serializers/chat_serializer.rb', line 48

def last_message_time
  object.messages.any? ? formatted_date(object.messages.last.created_at) : nil
end

#receiverObject



18
19
20
21
22
23
24
25
26
# File 'app/serializers/chat_serializer.rb', line 18

def receiver
  if object.receiver_id.present?
    {
      id: object.receiver_id,
      name: object.receiver.first_name,
      image: object.receiver.profile_image.present? ? object.receiver.profile_image.url : nil
    }
  end
end

#senderObject



8
9
10
11
12
13
14
15
16
# File 'app/serializers/chat_serializer.rb', line 8

def sender
  if object.sender_id.present?
    {
      id: object.sender_id,
      name: object.sender.first_name,
      image: object.sender.profile_image.present? ? object.sender.profile_image.url : nil
    }
  end
end

#unread_countObject



4
5
6
# File 'app/serializers/chat_serializer.rb', line 4

def unread_count
  scope&.dig(:current_user)&.id && object.messages.where(receiver_id: scope[:current_user].id, read_at: nil).count
end