MetaController.mjs 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import OError from '@overleaf/o-error'
  2. import EditorRealTimeController from '../Editor/EditorRealTimeController.mjs'
  3. import MetaHandler from './MetaHandler.mjs'
  4. import logger from '@overleaf/logger'
  5. import { expressify } from '@overleaf/promise-utils'
  6. async function getMetadata(req, res) {
  7. const { project_id: projectId } = req.params
  8. logger.debug({ projectId }, 'getting all labels for project')
  9. let projectMeta
  10. try {
  11. projectMeta = await MetaHandler.promises.getAllMetaForProject(projectId)
  12. } catch (error) {
  13. throw OError.tag(
  14. error,
  15. '[MetaController] error getting all labels from project',
  16. {
  17. project_id: projectId,
  18. }
  19. )
  20. }
  21. res.json({ projectId, projectMeta })
  22. }
  23. async function broadcastMetadataForDoc(req, res) {
  24. const { project_id: projectId } = req.params
  25. const { doc_id: docId } = req.params
  26. const { broadcast } = req.body
  27. logger.debug({ projectId, docId, broadcast }, 'getting labels for doc')
  28. let docMeta
  29. try {
  30. docMeta = await MetaHandler.promises.getMetaForDoc(projectId, docId)
  31. } catch (error) {
  32. throw OError.tag(error, '[MetaController] error getting labels from doc', {
  33. project_id: projectId,
  34. doc_id: docId,
  35. })
  36. }
  37. // default to broadcasting, unless explicitly disabled (for backwards compatibility)
  38. if (broadcast === false) {
  39. return res.json({ docId, meta: docMeta })
  40. }
  41. EditorRealTimeController.emitToRoom(projectId, 'broadcastDocMeta', {
  42. docId,
  43. meta: docMeta,
  44. })
  45. res.sendStatus(200) // 204?
  46. }
  47. export default {
  48. getMetadata: expressify(getMetadata),
  49. broadcastMetadataForDoc: expressify(broadcastMetadataForDoc),
  50. }