ChatController.js 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /* eslint-disable
  2. n/handle-callback-err,
  3. max-len,
  4. no-unused-vars,
  5. */
  6. // TODO: This file was created by bulk-decaffeinate.
  7. // Fix any style issues and re-enable lint.
  8. /*
  9. * decaffeinate suggestions:
  10. * DS101: Remove unnecessary use of Array.from
  11. * DS102: Remove unnecessary code created because of implicit returns
  12. * DS207: Consider shorter variations of null checks
  13. * Full docs: https://github.com/decaffeinate/decaffeinate/blob/master/docs/suggestions.md
  14. */
  15. let ChatController
  16. const ChatApiHandler = require('./ChatApiHandler')
  17. const EditorRealTimeController = require('../Editor/EditorRealTimeController')
  18. const SessionManager = require('../Authentication/SessionManager')
  19. const UserInfoManager = require('../User/UserInfoManager')
  20. const UserInfoController = require('../User/UserInfoController')
  21. const ChatManager = require('./ChatManager')
  22. const logger = require('@overleaf/logger')
  23. module.exports = ChatController = {
  24. sendMessage(req, res, next) {
  25. const { project_id: projectId } = req.params
  26. const { content, client_id: clientId } = req.body
  27. const userId = SessionManager.getLoggedInUserId(req.session)
  28. if (userId == null) {
  29. const err = new Error('no logged-in user')
  30. return next(err)
  31. }
  32. return ChatApiHandler.sendGlobalMessage(
  33. projectId,
  34. userId,
  35. content,
  36. function (err, message) {
  37. if (err != null) {
  38. return next(err)
  39. }
  40. return UserInfoManager.getPersonalInfo(
  41. message.user_id,
  42. function (err, user) {
  43. if (err != null) {
  44. return next(err)
  45. }
  46. message.user = UserInfoController.formatPersonalInfo(user)
  47. message.clientId = clientId
  48. EditorRealTimeController.emitToRoom(
  49. projectId,
  50. 'new-chat-message',
  51. message
  52. )
  53. return res.sendStatus(204)
  54. }
  55. )
  56. }
  57. )
  58. },
  59. getMessages(req, res, next) {
  60. const { project_id: projectId } = req.params
  61. const { query } = req
  62. return ChatApiHandler.getGlobalMessages(
  63. projectId,
  64. query.limit,
  65. query.before,
  66. function (err, messages) {
  67. if (err != null) {
  68. return next(err)
  69. }
  70. return ChatManager.injectUserInfoIntoThreads(
  71. { global: { messages } },
  72. function (err) {
  73. if (err != null) {
  74. return next(err)
  75. }
  76. return res.json(messages)
  77. }
  78. )
  79. }
  80. )
  81. },
  82. }