Просмотр исходного кода

Merge pull request #2798 from overleaf/spd-count-files

Add script to delete deleted-project data from filestore

GitOrigin-RevId: 9a2c5861edddf5ed26fc684257369fac4cf95475
Simon Detheridge 6 лет назад
Родитель
Сommit
bbe9f9a620

+ 11 - 2
services/web/scripts/count_files_in_projects.js

@@ -3,6 +3,8 @@ const ProjectEntityHandler = require('../app/src/Features/Project/ProjectEntityH
 const ProjectGetter = require('../app/src/Features/Project/ProjectGetter')
 const Errors = require('../app/src/Features/Errors/Errors')
 
+/* eslint-disable no-console */
+
 async function countFiles() {
   const rl = readline.createInterface({
     input: process.stdin
@@ -29,10 +31,17 @@ async function countFiles() {
       if (err instanceof Errors.NotFoundError) {
         console.error(projectId, 'NOTFOUND')
       } else {
-        throw err
+        console.log(projectId, 'ERROR', err.name, err.message)
       }
     }
   }
 }
 
-countFiles().then(() => process.exit(0))
+countFiles()
+  .then(() => {
+    process.exit(0)
+  })
+  .catch(err => {
+    console.log('Aiee, something went wrong!', err)
+    process.exit(1)
+  })

+ 41 - 0
services/web/scripts/delete_projects_from_filestore.js

@@ -0,0 +1,41 @@
+const readline = require('readline')
+const { Project } = require('../app/src/models/Project')
+const FileStoreHandler = require('../app/src/Features/FileStore/FileStoreHandler')
+const { DeletedProject } = require('../app/src/models/DeletedProject')
+
+/* eslint-disable no-console */
+
+async function deleteFiles() {
+  const rl = readline.createInterface({
+    input: process.stdin
+  })
+
+  for await (const projectId of rl) {
+    try {
+      const projectCount = await Project.count({ _id: projectId }).exec()
+      if (projectCount > 0) {
+        throw new Error('found an existing project - refusing')
+      }
+      const count = await DeletedProject.count({
+        'deleterData.deletedProjectId': projectId,
+        project: { $ne: null }
+      }).exec()
+      if (count > 0) {
+        throw new Error('found an existing deleted project - refusing')
+      }
+      await FileStoreHandler.promises.deleteProject(projectId)
+      console.error(projectId, 'OK')
+    } catch (err) {
+      console.error(projectId, 'ERROR', err.name, err.message)
+    }
+  }
+}
+
+deleteFiles()
+  .then(() => {
+    process.exit(0)
+  })
+  .catch(err => {
+    console.log('Aiee, something went wrong!', err)
+    process.exit(1)
+  })