| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- const { DeletedProject } = require('../app/src/models/DeletedProject')
- const { DeletedUser } = require('../app/src/models/DeletedUser')
- const { db } = require('../app/src/infrastructure/mongojs')
- const pLimit = require('p-limit')
- const CONCURRENCY = 10
- function getCollectionContents(collection) {
- return new Promise((resolve, reject) => {
- collection.find({}).toArray((error, contents) => {
- if (error) {
- reject(error)
- } else {
- resolve(contents)
- }
- })
- })
- }
- function deleteCollectionItem(collection, id) {
- return new Promise((resolve, reject) => {
- collection.remove({ _id: id }, error => {
- if (error) {
- reject(error)
- } else {
- resolve()
- }
- })
- })
- }
- async function backfillUser(user) {
- await DeletedUser.create({
- user: user,
- deleterData: {
- deletedAt: new Date(),
- deletedUserId: user._id,
- deletedUserLastLoggedIn: user.lastLoggedIn,
- deletedUserSignUpDate: user.signUpDate,
- deletedUserLoginCount: user.loginCount,
- deletedUserReferralId: user.referal_id,
- deletedUserReferredUsers: user.refered_users,
- deletedUserReferredUserCount: user.refered_user_count,
- deletedUserOverleafId: user.overleaf ? user.overleaf.id : undefined
- }
- })
- await deleteCollectionItem(db.usersDeletedByMigration, user._id)
- }
- async function backfillProject(project) {
- await DeletedProject.create({
- project: project,
- deleterData: {
- deletedAt: new Date(),
- deletedProjectId: project._id,
- deletedProjectOwnerId: project.owner_ref,
- deletedProjectCollaboratorIds: project.collaberator_refs,
- deletedProjectReadOnlyIds: project.readOnly_refs,
- deletedProjectReadWriteTokenAccessIds:
- project.tokenAccessReadAndWrite_refs,
- deletedProjectReadOnlyTokenAccessIds: project.tokenAccessReadOnly_refs,
- deletedProjectReadWriteToken: project.tokens
- ? project.tokens.readAndWrite
- : undefined,
- deletedProjectReadOnlyToken: project.tokens
- ? project.tokens.readOnly
- : undefined,
- deletedProjectLastUpdatedAt: project.lastUpdated
- }
- })
- await deleteCollectionItem(db.projectsDeletedByMigration, project._id)
- }
- async function backfillUsers() {
- const limit = pLimit(CONCURRENCY)
- const migrationUsers = await getCollectionContents(db.usersDeletedByMigration)
- console.log('Found ' + migrationUsers.length + ' users')
- await Promise.all(migrationUsers.map(user => limit(() => backfillUser(user))))
- }
- async function backfillProjects() {
- const limit = pLimit(CONCURRENCY)
- const migrationProjects = await getCollectionContents(
- db.projectsDeletedByMigration
- )
- console.log('Found ' + migrationProjects.length + ' projects')
- await Promise.all(
- migrationProjects.map(project => limit(() => backfillProject(project)))
- )
- }
- Promise.all([backfillProjects(), backfillUsers()]).then(() => {
- console.log('Finished')
- process.exit(0)
- })
|