find_malformed_filetrees.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. const { ReadPreference } = require('mongodb')
  2. const { db, waitForDb } = require('../app/src/infrastructure/mongodb')
  3. async function main() {
  4. await waitForDb()
  5. const projects = db.projects.find(
  6. {},
  7. { projection: { rootFolder: 1 }, readPreference: ReadPreference.SECONDARY }
  8. )
  9. let projectsProcessed = 0
  10. for await (const project of projects) {
  11. projectsProcessed += 1
  12. if (projectsProcessed % 100000 === 0) {
  13. console.log(projectsProcessed, 'projects processed')
  14. }
  15. processProject(project)
  16. }
  17. }
  18. function processProject(project) {
  19. const badPaths = findBadPaths(project.rootFolder[0])
  20. for (const path of badPaths) {
  21. console.log('BAD PATH:', project._id, `rootFolder.0.${path}`)
  22. }
  23. }
  24. function findBadPaths(folder) {
  25. const result = []
  26. for (const attr of ['docs', 'fileRefs', 'folders']) {
  27. if (folder[attr] && !Array.isArray(folder[attr])) {
  28. result.push(attr)
  29. }
  30. }
  31. if (folder.folders && Array.isArray(folder.folders)) {
  32. for (const [i, subfolder] of folder.folders.entries()) {
  33. for (const badPath of findBadPaths(subfolder)) {
  34. result.push(`folders.${i}.${badPath}`)
  35. }
  36. }
  37. }
  38. return result
  39. }
  40. main()
  41. .then(() => {
  42. process.exit(0)
  43. })
  44. .catch(err => {
  45. console.error(err)
  46. process.exit(1)
  47. })