restore_orphaned_docs.mjs 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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. import { scriptRunner } from './lib/ScriptRunner.mjs'
  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. try {
  34. await scriptRunner(main)
  35. process.exit(0)
  36. } catch (error) {
  37. console.error(error)
  38. process.exit(1)
  39. }