MessageFormatter.coffee 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. module.exports = MessageFormatter =
  2. formatMessageForClientSide: (message) ->
  3. if message._id?
  4. message.id = message._id.toString()
  5. delete message._id
  6. formattedMessage =
  7. id: message.id
  8. content: message.content
  9. timestamp: message.timestamp
  10. user_id: message.user_id
  11. if message.edited_at?
  12. formattedMessage.edited_at = message.edited_at
  13. return formattedMessage
  14. formatMessagesForClientSide: (messages) ->
  15. (@formatMessageForClientSide(message) for message in messages)
  16. groupMessagesByThreads: (rooms, messages) ->
  17. rooms_by_id = {}
  18. for room in rooms
  19. rooms_by_id[room._id.toString()] = room
  20. threads = {}
  21. getThread = (room) ->
  22. thread_id = room.thread_id.toString()
  23. if threads[thread_id]?
  24. return threads[thread_id]
  25. else
  26. thread = { messages: [] }
  27. if room.resolved?
  28. thread.resolved = true
  29. thread.resolved_at = room.resolved.ts
  30. thread.resolved_by_user_id = room.resolved.user_id
  31. threads[thread_id] = thread
  32. return thread
  33. for message in messages
  34. room = rooms_by_id[message.room_id.toString()]
  35. if room?
  36. thread = getThread(room)
  37. thread.messages.push MessageFormatter.formatMessageForClientSide(message)
  38. for thread_id, thread of threads
  39. thread.messages.sort (a,b) -> a.timestamp - b.timestamp
  40. return threads