restore_soft_deleted_docs.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  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 ProjectGetter = require('../app/src/Features/Project/ProjectGetter')
  5. const ARGV = process.argv.slice(2)
  6. const DEVELOPER_USER_ID = ARGV.shift()
  7. const PROJECT_ID = ARGV.shift()
  8. const FILE_NAMES_TO_RESTORE = ARGV
  9. async function main() {
  10. const project = await ProjectGetter.promises.getProject(PROJECT_ID, {
  11. deletedDocs: 1
  12. })
  13. const docsToRestore = project.deletedDocs.filter(doc =>
  14. FILE_NAMES_TO_RESTORE.includes(doc.name)
  15. )
  16. for (const deletedDoc of docsToRestore) {
  17. const doc = await new Promise((resolve, reject) => {
  18. ProjectEntityHandler.getDoc(
  19. PROJECT_ID,
  20. deletedDoc._id,
  21. {
  22. include_deleted: true
  23. },
  24. (err, lines, rev, version, ranges) => {
  25. if (err) return reject(err)
  26. resolve({ lines, ranges })
  27. }
  28. )
  29. })
  30. const newDoc = await new Promise((resolve, reject) => {
  31. ProjectEntityUpdateHandler.addDocWithRanges(
  32. PROJECT_ID,
  33. null,
  34. `${new Date().toISOString().replace(/:/g, '-')}-${deletedDoc.name}`,
  35. doc.lines,
  36. doc.ranges,
  37. DEVELOPER_USER_ID,
  38. (err, doc, folderId) => {
  39. if (err) return reject(err)
  40. resolve({ doc, folderId })
  41. }
  42. )
  43. })
  44. console.log(newDoc)
  45. }
  46. }
  47. waitForDb()
  48. .then(main)
  49. .then(() => {
  50. process.exit(0)
  51. })
  52. .catch(error => {
  53. console.error(error)
  54. process.exit(1)
  55. })