Files
Verso/services/web/app/src/Features/Chat/ChatController.mjs
T
Andrew Rumble 07c827e9fd Merge pull request #29928 from overleaf/ar-last-infrastructure-conversions
[web] last infrastructure conversions

GitOrigin-RevId: ad1aff9b7df0610ed0303157d9e2c8032f32c02b
2025-11-28 09:05:56 +00:00

96 lines
2.7 KiB
JavaScript

import { expressify } from '@overleaf/promise-utils'
import Modules from '../../infrastructure/Modules.mjs'
import ChatApiHandler from './ChatApiHandler.mjs'
import EditorRealTimeController from '../Editor/EditorRealTimeController.mjs'
import SessionManager from '../Authentication/SessionManager.mjs'
import UserInfoManager from '../User/UserInfoManager.mjs'
import UserInfoController from '../User/UserInfoController.mjs'
import ChatManager from './ChatManager.mjs'
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)
}
async function deleteMessage(req, res) {
const { project_id: projectId, message_id: messageId } = req.params
const userId = SessionManager.getLoggedInUserId(req.session)
if (userId == null) {
throw new Error('no logged-in user')
}
await ChatApiHandler.promises.deleteGlobalMessage(projectId, messageId)
EditorRealTimeController.emitToRoom(projectId, 'delete-global-message', {
messageId,
userId,
})
res.sendStatus(204)
}
async function editMessage(req, res, next) {
const { project_id: projectId, message_id: messageId } = req.params
const { content } = req.body
const userId = SessionManager.getLoggedInUserId(req.session)
if (userId == null) {
throw new Error('no logged-in user')
}
await ChatApiHandler.promises.editGlobalMessage(
projectId,
messageId,
userId,
content
)
EditorRealTimeController.emitToRoom(projectId, 'edit-global-message', {
messageId,
userId,
content,
})
res.sendStatus(204)
}
export default {
sendMessage: expressify(sendMessage),
getMessages: expressify(getMessages),
deleteMessage: expressify(deleteMessage),
editMessage: expressify(editMessage),
}