DocumentUpdaterController.mjs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import logger from '@overleaf/logger'
  2. import DocumentUpdaterHandler from './DocumentUpdaterHandler.mjs'
  3. import ProjectLocator from '../Project/ProjectLocator.mjs'
  4. import { plainTextResponse } from '../../infrastructure/Response.mjs'
  5. import { expressify } from '@overleaf/promise-utils'
  6. async function getDoc(req, res) {
  7. const projectId = req.params.Project_id
  8. const docId = req.params.Doc_id
  9. try {
  10. const { element: doc } = await ProjectLocator.promises.findElement({
  11. project_id: projectId,
  12. element_id: docId,
  13. type: 'doc',
  14. })
  15. const { lines } = await DocumentUpdaterHandler.promises.getDocument(
  16. projectId,
  17. docId,
  18. -1 // latest version only
  19. )
  20. res.setContentDisposition('attachment', { filename: doc.name })
  21. plainTextResponse(res, lines.join('\n'))
  22. } catch (err) {
  23. if (err.name === 'NotFoundError') {
  24. logger.warn(
  25. { err, projectId, docId },
  26. 'entity not found when downloading doc'
  27. )
  28. return res.sendStatus(404)
  29. }
  30. logger.err(
  31. { err, projectId, docId },
  32. 'error getting document for downloading'
  33. )
  34. return res.sendStatus(500)
  35. }
  36. }
  37. export default {
  38. getDoc: expressify(getDoc),
  39. }