MessageManager.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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 db.messages.find(query).sort({ timestamp: -1 }).limit(limit).toArray()
  21. }
  22. export async function findAllMessagesInRooms(roomIds) {
  23. return db.messages
  24. .find({
  25. room_id: { $in: roomIds },
  26. })
  27. .toArray()
  28. }
  29. export async function deleteAllMessagesInRoom(roomId) {
  30. await db.messages.deleteMany({
  31. room_id: roomId,
  32. })
  33. }
  34. export async function deleteAllMessagesInRooms(roomIds) {
  35. await db.messages.deleteMany({
  36. room_id: { $in: roomIds },
  37. })
  38. }
  39. export async function updateMessage(
  40. roomId,
  41. messageId,
  42. userId,
  43. content,
  44. timestamp
  45. ) {
  46. const query = _ensureIdsAreObjectIds({
  47. _id: messageId,
  48. room_id: roomId,
  49. })
  50. if (userId) {
  51. query.user_id = ObjectId(userId)
  52. }
  53. const res = await db.messages.updateOne(query, {
  54. $set: {
  55. content,
  56. edited_at: timestamp,
  57. },
  58. })
  59. return res.modifiedCount === 1
  60. }
  61. export async function deleteMessage(roomId, messageId) {
  62. const query = _ensureIdsAreObjectIds({
  63. _id: messageId,
  64. room_id: roomId,
  65. })
  66. await db.messages.deleteOne(query)
  67. }
  68. function _ensureIdsAreObjectIds(query) {
  69. if (query.user_id && !(query.user_id instanceof ObjectId)) {
  70. query.user_id = ObjectId(query.user_id)
  71. }
  72. if (query.room_id && !(query.room_id instanceof ObjectId)) {
  73. query.room_id = ObjectId(query.room_id)
  74. }
  75. if (query._id && !(query._id instanceof ObjectId)) {
  76. query._id = ObjectId(query._id)
  77. }
  78. return query
  79. }