ProjectEntityRestoreHandler.js 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. const { callbackify } = require('util')
  2. const Path = require('path')
  3. const ProjectEntityHandler = require('./ProjectEntityHandler')
  4. const ProjectEntityUpdateHandler = require('./ProjectEntityUpdateHandler')
  5. // generate a new name based on the original, with an optional label.
  6. // e.g. origname-20210101-122345.tex (default)
  7. // origname-restored-20210101-122345.tex (label="restored")
  8. function generateRestoredName(docName, label) {
  9. const formattedTimestamp = new Date()
  10. .toISOString()
  11. .replace('T', '-')
  12. .replace(/[^0-9-]/g, '')
  13. const extension = Path.extname(docName)
  14. const basename =
  15. Path.basename(docName, extension) + (label ? `-${label}` : '')
  16. return `${basename}-${formattedTimestamp}${extension}`
  17. }
  18. async function restoreDeletedDoc(projectId, docId, docName, userId) {
  19. const deletedDoc = await ProjectEntityHandler.promises.getDoc(
  20. projectId,
  21. docId,
  22. { include_deleted: true }
  23. )
  24. const deletedDocName = generateRestoredName(docName)
  25. return await ProjectEntityUpdateHandler.promises.addDocWithRanges(
  26. projectId,
  27. null,
  28. `${deletedDocName}`,
  29. deletedDoc.lines,
  30. deletedDoc.ranges,
  31. userId
  32. )
  33. }
  34. module.exports = {
  35. restoreDeletedDoc: callbackify(restoreDeletedDoc),
  36. generateRestoredName,
  37. promises: {
  38. restoreDeletedDoc,
  39. },
  40. }