restore_orphaned_docs.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. const { waitForDb } = require('../app/src/infrastructure/mongodb')
  2. const ProjectEntityRestoreHandler = require('../app/src/Features/Project/ProjectEntityRestoreHandler')
  3. const ProjectEntityHandler = require('../app/src/Features/Project/ProjectEntityHandler')
  4. const DocstoreManager = require('../app/src/Features/Docstore/DocstoreManager')
  5. const ARGV = process.argv.slice(2)
  6. const DEVELOPER_USER_ID = ARGV.shift()
  7. const PROJECT_ID = ARGV.shift()
  8. const DOC_IDS_TO_RESTORE = ARGV
  9. async function main() {
  10. const allDocs = await DocstoreManager.promises.getAllDocs(PROJECT_ID)
  11. const docsToRestore = allDocs.filter(doc =>
  12. DOC_IDS_TO_RESTORE.includes(doc._id)
  13. )
  14. const docPaths =
  15. await ProjectEntityHandler.promises.getAllDocPathsFromProjectById(
  16. PROJECT_ID
  17. )
  18. for (const orphanedDoc of docsToRestore) {
  19. console.log('Restoring doc: ', orphanedDoc._id)
  20. if (docPaths[orphanedDoc._id]) {
  21. console.log(`Doc already exists, skipping ${docPaths[orphanedDoc._id]}`)
  22. continue
  23. }
  24. const newDoc = await ProjectEntityRestoreHandler.promises.restoreDeletedDoc(
  25. PROJECT_ID,
  26. orphanedDoc._id,
  27. `restored-${orphanedDoc._id}-rev-${orphanedDoc.rev}.tex`,
  28. DEVELOPER_USER_ID
  29. )
  30. console.log(newDoc)
  31. }
  32. }
  33. waitForDb()
  34. .then(main)
  35. .then(() => {
  36. process.exit(0)
  37. })
  38. .catch(error => {
  39. console.error(error)
  40. process.exit(1)
  41. })