overleaf/services/web/scripts/find_malformed_filetrees.js
Eric Mc Sween 9c036b1d90 Merge pull request #7417 from overleaf/em-find-bad-file-trees
Script for finding malformed filetrees

GitOrigin-RevId: 256f724ec61c0a88a8904f9a4c028cfc78d6d0bb
2022-04-07 08:04:12 +00:00

51 lines
1.3 KiB
JavaScript

const { ReadPreference } = require('mongodb')
const { db, waitForDb } = require('../app/src/infrastructure/mongodb')
async function main() {
await waitForDb()
const projects = db.projects.find(
{},
{ projection: { rootFolder: 1 }, readPreference: ReadPreference.SECONDARY }
)
let projectsProcessed = 0
for await (const project of projects) {
projectsProcessed += 1
if (projectsProcessed % 100000 === 0) {
console.log(projectsProcessed, 'projects processed')
}
processProject(project)
}
}
function processProject(project) {
const badPaths = findBadPaths(project.rootFolder[0])
for (const path of badPaths) {
console.log('BAD PATH:', project._id, `rootFolder.0.${path}`)
}
}
function findBadPaths(folder) {
const result = []
for (const attr of ['docs', 'fileRefs', 'folders']) {
if (folder[attr] && !Array.isArray(folder[attr])) {
result.push(attr)
}
}
if (folder.folders && Array.isArray(folder.folders)) {
for (const [i, subfolder] of folder.folders.entries()) {
for (const badPath of findBadPaths(subfolder)) {
result.push(`folders.${i}.${badPath}`)
}
}
}
return result
}
main()
.then(() => {
process.exit(0)
})
.catch(err => {
console.error(err)
process.exit(1)
})