DocumentController.js 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. const ProjectGetter = require('../Project/ProjectGetter')
  2. const ProjectLocator = require('../Project/ProjectLocator')
  3. const ProjectEntityHandler = require('../Project/ProjectEntityHandler')
  4. const ProjectEntityUpdateHandler = require('../Project/ProjectEntityUpdateHandler')
  5. const logger = require('@overleaf/logger')
  6. const _ = require('lodash')
  7. const { plainTextResponse } = require('../../infrastructure/Response')
  8. const { expressify } = require('@overleaf/promise-utils')
  9. async function getDocument(req, res) {
  10. const { Project_id: projectId, doc_id: docId } = req.params
  11. const plain = req.query.plain === 'true'
  12. const peek = req.query.peek === 'true'
  13. const project = await ProjectGetter.promises.getProject(projectId, {
  14. rootFolder: true,
  15. overleaf: true,
  16. })
  17. if (!project) {
  18. return res.sendStatus(404)
  19. }
  20. const { path } = await ProjectLocator.promises.findElement({
  21. project,
  22. element_id: docId,
  23. type: 'doc',
  24. })
  25. const { lines, version, ranges } = await ProjectEntityHandler.promises.getDoc(
  26. projectId,
  27. docId,
  28. { peek }
  29. )
  30. if (plain) {
  31. plainTextResponse(res, lines.join('\n'))
  32. } else {
  33. const projectHistoryId = _.get(project, 'overleaf.history.id')
  34. const historyRangesSupport = _.get(
  35. project,
  36. 'overleaf.history.rangesSupportEnabled',
  37. false
  38. )
  39. // all projects are now migrated to Full Project History, keeping the field
  40. // for API compatibility
  41. const projectHistoryType = 'project-history'
  42. res.json({
  43. lines,
  44. version,
  45. ranges,
  46. pathname: path.fileSystem,
  47. projectHistoryId,
  48. projectHistoryType,
  49. historyRangesSupport,
  50. })
  51. }
  52. }
  53. async function setDocument(req, res) {
  54. const { Project_id: projectId, doc_id: docId } = req.params
  55. const { lines, version, ranges, lastUpdatedAt, lastUpdatedBy } = req.body
  56. const result = await ProjectEntityUpdateHandler.promises.updateDocLines(
  57. projectId,
  58. docId,
  59. lines,
  60. version,
  61. ranges,
  62. lastUpdatedAt,
  63. lastUpdatedBy
  64. )
  65. logger.debug(
  66. { docId, projectId },
  67. 'finished receiving set document request from api (docupdater)'
  68. )
  69. res.json(result)
  70. }
  71. module.exports = {
  72. getDocument: expressify(getDocument),
  73. setDocument: expressify(setDocument),
  74. }