Jelajahi Sumber

Merge pull request #3316 from overleaf/jpa-script-restore-soft-deleted-docs

[scripts] restore_soft_deleted_docs: port the script from the dev-manual

GitOrigin-RevId: e445cfad0d0f04275b3899c34b7963ddb29d4444
Miguel Serrano 6 tahun lalu
induk
melakukan
04c35c5a34
1 mengubah file dengan 59 tambahan dan 0 penghapusan
  1. 59 0
      services/web/scripts/restore_soft_deleted_docs.js

+ 59 - 0
services/web/scripts/restore_soft_deleted_docs.js

@@ -0,0 +1,59 @@
+const { waitForDb } = require('../app/src/infrastructure/mongodb')
+const ProjectEntityUpdateHandler = require('../app/src/Features/Project/ProjectEntityUpdateHandler')
+const ProjectEntityHandler = require('../app/src/Features/Project/ProjectEntityHandler')
+const ProjectGetter = require('../app/src/Features/Project/ProjectGetter')
+
+const ARGV = process.argv.slice(2)
+const DEVELOPER_USER_ID = ARGV.shift()
+const PROJECT_ID = ARGV.shift()
+const FILE_NAMES_TO_RESTORE = ARGV
+
+async function main() {
+  const project = await ProjectGetter.promises.getProject(PROJECT_ID, {
+    deletedDocs: 1
+  })
+  const docsToRestore = project.deletedDocs.filter(doc =>
+    FILE_NAMES_TO_RESTORE.includes(doc.name)
+  )
+  for (const deletedDoc of docsToRestore) {
+    const doc = await new Promise((resolve, reject) => {
+      ProjectEntityHandler.getDoc(
+        PROJECT_ID,
+        deletedDoc._id,
+        {
+          include_deleted: true
+        },
+        (err, lines, rev, version, ranges) => {
+          if (err) return reject(err)
+          resolve({ lines, ranges })
+        }
+      )
+    })
+
+    const newDoc = await new Promise((resolve, reject) => {
+      ProjectEntityUpdateHandler.addDocWithRanges(
+        PROJECT_ID,
+        null,
+        `${new Date().toISOString().replace(/:/g, '-')}-${deletedDoc.name}`,
+        doc.lines,
+        doc.ranges,
+        DEVELOPER_USER_ID,
+        (err, doc, folderId) => {
+          if (err) return reject(err)
+          resolve({ doc, folderId })
+        }
+      )
+    })
+    console.log(newDoc)
+  }
+}
+
+waitForDb()
+  .then(main)
+  .then(() => {
+    process.exit(0)
+  })
+  .catch(error => {
+    console.error(error)
+    process.exit(1)
+  })