20250519101127_drop_deletedFiles.mjs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. import Helpers from './lib/helpers.mjs'
  2. import { getCollectionInternal, db } from './lib/mongodb.mjs'
  3. import { batchedUpdate } from '@overleaf/mongo-utils/batchedUpdate.js'
  4. const tags = ['server-ce', 'server-pro', 'saas']
  5. const indexes = [
  6. {
  7. key: {
  8. projectId: 1,
  9. },
  10. name: 'projectId_1',
  11. },
  12. ]
  13. async function getCollection() {
  14. // NOTE: The deletedFiles collection is not available to the application as it has been retired. Fetch it here.
  15. return await getCollectionInternal('deletedFiles')
  16. }
  17. const migrate = async () => {
  18. const collection = await getCollection()
  19. // Purge legacy deletedFiles array from project records.
  20. await batchedUpdate(
  21. db.projects,
  22. { deletedFiles: { $exists: true } },
  23. { $unset: { deletedFiles: 1 } }
  24. )
  25. // Purge legacy deletedFiles array from soft-deleted project records.
  26. await batchedUpdate(
  27. db.deletedProjects,
  28. { 'project.deletedFiles': { $exists: true } },
  29. { $unset: { 'project.deletedFiles': 1 } }
  30. )
  31. // Drop historic deletedFiles records
  32. await collection.drop()
  33. }
  34. const rollback = async () => {
  35. await Helpers.addIndexesToCollection(await getCollection(), indexes)
  36. }
  37. export default {
  38. tags,
  39. migrate,
  40. rollback,
  41. }