restore_orphaned_docs.mjs 1.3 KB

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