restore_soft_deleted_docs.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. const { waitForDb } = require('../app/src/infrastructure/mongodb')
  2. const ProjectEntityUpdateHandler = require('../app/src/Features/Project/ProjectEntityUpdateHandler')
  3. const ProjectEntityHandler = require('../app/src/Features/Project/ProjectEntityHandler')
  4. const DocstoreManager = require('../app/src/Features/Docstore/DocstoreManager')
  5. const Path = require('path')
  6. const ARGV = process.argv.slice(2)
  7. const DEVELOPER_USER_ID = ARGV.shift()
  8. const PROJECT_ID = ARGV.shift()
  9. const FILE_NAMES_TO_RESTORE = ARGV
  10. async function main() {
  11. const deletedDocs = await DocstoreManager.promises.getAllDeletedDocs(
  12. PROJECT_ID
  13. )
  14. const docsToRestore = deletedDocs.filter(doc =>
  15. FILE_NAMES_TO_RESTORE.includes(doc.name)
  16. )
  17. for (const deletedDoc of docsToRestore) {
  18. const doc = await new Promise((resolve, reject) => {
  19. ProjectEntityHandler.getDoc(
  20. PROJECT_ID,
  21. deletedDoc._id,
  22. {
  23. include_deleted: true,
  24. },
  25. (err, lines, rev, version, ranges) => {
  26. if (err) return reject(err)
  27. resolve({ lines, ranges })
  28. }
  29. )
  30. })
  31. const formattedTimestamp = new Date()
  32. .toISOString()
  33. .replace('T', '-')
  34. .replace(/[^0-9-]/g, '')
  35. const extension = Path.extname(deletedDoc.name)
  36. const basename = Path.basename(deletedDoc.name, extension)
  37. const deletedDocName = `${basename}-${formattedTimestamp}${extension}`
  38. const newDoc = await new Promise((resolve, reject) => {
  39. ProjectEntityUpdateHandler.addDocWithRanges(
  40. PROJECT_ID,
  41. null,
  42. `${deletedDocName}`,
  43. doc.lines,
  44. doc.ranges,
  45. DEVELOPER_USER_ID,
  46. (err, doc, folderId) => {
  47. if (err) return reject(err)
  48. resolve({ doc, folderId })
  49. }
  50. )
  51. })
  52. console.log(newDoc)
  53. }
  54. }
  55. waitForDb()
  56. .then(main)
  57. .then(() => {
  58. process.exit(0)
  59. })
  60. .catch(error => {
  61. console.error(error)
  62. process.exit(1)
  63. })