MessageManager.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import { db, ObjectId } from '../../mongodb.js'
  2. export async function createMessage(roomId, userId, content, timestamp) {
  3. let newMessageOpts = {
  4. content,
  5. room_id: roomId,
  6. user_id: userId,
  7. timestamp,
  8. }
  9. newMessageOpts = _ensureIdsAreObjectIds(newMessageOpts)
  10. const confirmation = await db.messages.insertOne(newMessageOpts)
  11. newMessageOpts._id = confirmation.insertedId
  12. return newMessageOpts
  13. }
  14. export async function getMessages(roomId, limit, before) {
  15. let query = { room_id: roomId }
  16. if (before) {
  17. query.timestamp = { $lt: before }
  18. }
  19. query = _ensureIdsAreObjectIds(query)
  20. return await db.messages
  21. .find(query)
  22. .sort({ timestamp: -1 })
  23. .limit(limit)
  24. .toArray()
  25. }
  26. export async function findAllMessagesInRooms(roomIds) {
  27. return await db.messages
  28. .find({
  29. room_id: { $in: roomIds },
  30. })
  31. .toArray()
  32. }
  33. export async function deleteAllMessagesInRoom(roomId) {
  34. await db.messages.deleteMany({
  35. room_id: roomId,
  36. })
  37. }
  38. export async function deleteAllMessagesInRooms(roomIds) {
  39. await db.messages.deleteMany({
  40. room_id: { $in: roomIds },
  41. })
  42. }
  43. export async function updateMessage(
  44. roomId,
  45. messageId,
  46. userId,
  47. content,
  48. timestamp
  49. ) {
  50. const query = _ensureIdsAreObjectIds({
  51. _id: messageId,
  52. room_id: roomId,
  53. })
  54. if (userId) {
  55. query.user_id = new ObjectId(userId)
  56. }
  57. const res = await db.messages.updateOne(query, {
  58. $set: {
  59. content,
  60. edited_at: timestamp,
  61. },
  62. })
  63. return res.modifiedCount === 1
  64. }
  65. export async function deleteMessage(roomId, messageId) {
  66. const query = _ensureIdsAreObjectIds({
  67. _id: messageId,
  68. room_id: roomId,
  69. })
  70. await db.messages.deleteOne(query)
  71. }
  72. function _ensureIdsAreObjectIds(query) {
  73. if (query.user_id && !(query.user_id instanceof ObjectId)) {
  74. query.user_id = new ObjectId(query.user_id)
  75. }
  76. if (query.room_id && !(query.room_id instanceof ObjectId)) {
  77. query.room_id = new ObjectId(query.room_id)
  78. }
  79. if (query._id && !(query._id instanceof ObjectId)) {
  80. query._id = new ObjectId(query._id)
  81. }
  82. return query
  83. }