overleaf/services/chat/app/coffee/Features/Messages/MessageHttpController.coffee

80 lines
3.2 KiB
CoffeeScript
Raw Normal View History

2014-08-15 05:50:36 -04:00
logger = require "logger-sharelatex"
metrics = require "metrics-sharelatex"
2014-08-15 05:50:36 -04:00
MessageManager = require "./MessageManager"
MessageFormatter = require "./MessageFormatter"
ThreadManager = require "../Threads/ThreadManager"
{ObjectId} = require "../../mongojs"
2014-08-15 05:50:36 -04:00
module.exports = MessageHttpController =
DEFAULT_MESSAGE_LIMIT: 50
getGlobalMessages: (req, res, next) ->
MessageHttpController._getMessages(ThreadManager.GLOBAL_THREAD, req, res, next)
2014-08-15 05:50:36 -04:00
sendGlobalMessage: (req, res, next) ->
MessageHttpController._sendMessage(ThreadManager.GLOBAL_THREAD, req, res, next)
sendThreadMessage: (req, res, next) ->
MessageHttpController._sendMessage(req.params.thread_id, req, res, next)
getAllThreads: (req, res, next) ->
2014-08-15 05:50:36 -04:00
{project_id} = req.params
logger.log {project_id}, "getting all threads"
ThreadManager.findAllThreadRooms project_id, (error, rooms) ->
return next(error) if error?
room_ids = rooms.map (r) -> r._id
MessageManager.findAllMessagesInRooms room_ids, (error, messages) ->
return next(error) if error?
2017-01-06 08:14:47 -05:00
threads = MessageFormatter.groupMessagesByThreads rooms, messages
res.json threads
resolveThread: (req, res, next) ->
{project_id, thread_id} = req.params
{user_id} = req.body
logger.log {user_id, project_id, thread_id}, "marking thread as resolved"
ThreadManager.resolveThread project_id, thread_id, user_id, (error) ->
return next(error) if error?
res.send 204 # No content
reopenThread: (req, res, next) ->
{project_id, thread_id} = req.params
logger.log {project_id, thread_id}, "reopening thread"
ThreadManager.reopenThread project_id, thread_id, (error) ->
return next(error) if error?
res.send 204 # No content
2014-08-15 05:50:36 -04:00
_sendMessage: (client_thread_id, req, res, next) ->
{user_id, content} = req?.body
{project_id} = req.params
if !ObjectId.isValid(user_id)
return res.send(400, "Invalid user_id")
logger.log {client_thread_id, project_id, user_id, content}, "new message received"
ThreadManager.findOrCreateThread project_id, client_thread_id, (error, thread) ->
2014-08-15 05:50:36 -04:00
return next(error) if error?
MessageManager.createMessage thread._id, user_id, content, Date.now(), (error, message) ->
return next(error) if error?
2017-01-06 08:14:47 -05:00
message = MessageFormatter.formatMessageForClientSide(message)
message.room_id = project_id
res.send(201, message)
2014-08-15 05:50:36 -04:00
_getMessages: (client_thread_id, req, res, next) ->
2014-08-15 05:50:36 -04:00
{project_id} = req.params
if req.query?.before?
before = parseInt(req.query.before, 10)
else
before = null
2014-08-15 05:50:36 -04:00
if req.query?.limit?
limit = parseInt(req.query.limit, 10)
else
limit = MessageHttpController.DEFAULT_MESSAGE_LIMIT
logger.log {limit, before, project_id, client_thread_id}, "get message request received"
ThreadManager.findOrCreateThread project_id, client_thread_id, (error, thread) ->
2014-08-15 05:50:36 -04:00
return next(error) if error?
thread_object_id = thread._id
logger.log {limit, before, project_id, client_thread_id, thread_object_id}, "found or created thread"
MessageManager.getMessages thread_object_id, limit, before, (error, messages) ->
return next(error) if error?
2017-01-06 08:14:47 -05:00
messages = MessageFormatter.formatMessagesForClientSide messages
logger.log {project_id, messages}, "got messages"
res.send 200, messages