Files
overleaf-cep/services/web/app/src/Features/Chat/ChatController.js
T
Eric Mc Sween b2df393bbb Merge pull request #28098 from overleaf/em-dsmp-chat-event
Send a DSMP event when a chat message is sent

GitOrigin-RevId: 062476676c91a4edf3d6f837d60ad16c7f912771
2025-08-26 08:05:36 +00:00

55 lines
1.7 KiB
JavaScript

const { expressify } = require('@overleaf/promise-utils')
const Modules = require('../../infrastructure/Modules')
const ChatApiHandler = require('./ChatApiHandler')
const EditorRealTimeController = require('../Editor/EditorRealTimeController')
const SessionManager = require('../Authentication/SessionManager')
const UserInfoManager = require('../User/UserInfoManager')
const UserInfoController = require('../User/UserInfoController')
const ChatManager = require('./ChatManager')
async function sendMessage(req, res) {
const { project_id: projectId } = req.params
const { content, client_id: clientId } = req.body
const userId = SessionManager.getLoggedInUserId(req.session)
if (userId == null) {
throw new Error('no logged-in user')
}
const message = await ChatApiHandler.promises.sendGlobalMessage(
projectId,
userId,
content
)
const user = await UserInfoManager.promises.getPersonalInfo(message.user_id)
message.user = UserInfoController.formatPersonalInfo(user)
message.clientId = clientId
EditorRealTimeController.emitToRoom(projectId, 'new-chat-message', message)
await Modules.promises.hooks.fire('chatMessageSent', {
projectId,
userId,
messageId: message.id,
})
res.sendStatus(204)
}
async function getMessages(req, res) {
const { project_id: projectId } = req.params
const { query } = req
const messages = await ChatApiHandler.promises.getGlobalMessages(
projectId,
query.limit,
query.before
)
await ChatManager.promises.injectUserInfoIntoThreads({ global: { messages } })
res.json(messages)
}
module.exports = {
sendMessage: expressify(sendMessage),
getMessages: expressify(getMessages),
}