| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- mongojs = require "../../mongojs"
- db = mongojs.db
- ObjectId = mongojs.ObjectId
- async = require "async"
- metrics = require 'metrics-sharelatex'
- logger = require 'logger-sharelatex'
- module.exports = MessageManager =
- createMessage: (room_id, user_id, content, timestamp, callback = (error, message) ->) ->
- newMessageOpts =
- content: content
- room_id: room_id
- user_id: user_id
- timestamp: timestamp
- newMessageOpts = @_ensureIdsAreObjectIds(newMessageOpts)
- db.messages.save newMessageOpts, callback
- getMessages: (room_id, limit, before, callback = (error, messages) ->) ->
- query =
- room_id: room_id
- if before?
- query.timestamp = { $lt: before }
- query = @_ensureIdsAreObjectIds(query)
- cursor = db.messages.find(query).sort({ timestamp: -1 }).limit(limit)
- cursor.toArray callback
-
- findAllMessagesInRooms: (room_ids, callback = (error, messages) ->) ->
- db.messages.find {
- room_id: { $in: room_ids }
- }, callback
- deleteAllMessagesInRoom: (room_id, callback = (error) ->) ->
- db.messages.remove {
- room_id: room_id
- }, callback
-
- updateMessage: (room_id, message_id, content, timestamp, callback = (error, message) ->) ->
- query = @_ensureIdsAreObjectIds(
- _id: message_id
- room_id: room_id
- )
- db.messages.update query, {
- $set:
- content: content
- edited_at: timestamp
- }, (error) ->
- return callback(error) if error?
- return callback()
- deleteMessage: (room_id, message_id, callback = (error) ->) ->
- query = @_ensureIdsAreObjectIds(
- _id: message_id
- room_id: room_id
- )
- db.messages.remove query, (error) ->
- return callback(error) if error?
- return callback()
- _ensureIdsAreObjectIds: (query) ->
- if query.user_id? and query.user_id not instanceof ObjectId
- query.user_id = ObjectId(query.user_id)
- if query.room_id? and query.room_id not instanceof ObjectId
- query.room_id = ObjectId(query.room_id)
- if query._id? and query._id not instanceof ObjectId
- query._id = ObjectId(query._id)
- return query
- [
- 'createMessage',
- 'getMessages',
- 'findAllMessagesInRooms',
- 'updateMessage',
- 'deleteMessage'
- ].map (method) ->
- metrics.timeAsyncMethod(MessageManager, method, 'mongo.MessageManager', logger)
|