mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-11-14 22:23:42 +01:00
Merge pull request #1959 from overleaf/spd-integration-soft-deletion
Integration: Merge soft-deletion features into master GitOrigin-RevId: 83baf730be2f256ad0d02271600392fda144b761
This commit is contained in:
committed by
sharelatex
parent
032ef02a03
commit
bf740f1e25
@@ -0,0 +1,54 @@
|
||||
const { DeletedProject } = require('../app/src/models/DeletedProject')
|
||||
const Async = require('async')
|
||||
|
||||
DeletedProject.find(
|
||||
{},
|
||||
{ 'project._id': 1, 'project.owner_ref': 1 },
|
||||
(error, deletedProjects) => {
|
||||
if (error) {
|
||||
throw error
|
||||
}
|
||||
|
||||
Async.eachLimit(
|
||||
deletedProjects,
|
||||
10,
|
||||
(deletedProject, cb) => {
|
||||
if (deletedProject.project) {
|
||||
const src = deletedProject.project
|
||||
DeletedProject.findOneAndUpdate(
|
||||
{ _id: deletedProject._id },
|
||||
{
|
||||
$set: {
|
||||
'deleterData.deletedProjectId': src._id,
|
||||
'deleterData.deletedProjectOwnerId': src.owner_ref,
|
||||
'deleterData.deletedProjectCollaboratorIds':
|
||||
src.collaberator_refs,
|
||||
'deleterData.deletedProjectReadOnlyIds': src.readOnly_refs,
|
||||
'deleterData.deletedProjectReadWriteToken': src.tokens
|
||||
? src.tokens.readAndWrite
|
||||
: undefined,
|
||||
'deleterData.deletedProjectReadOnlyToken': src.tokens
|
||||
? src.tokens.readOnly
|
||||
: undefined,
|
||||
'deleterData.deletedProjectReadWriteTokenAccessIds':
|
||||
src.tokenAccessReadOnly_refs,
|
||||
'deleterData.deletedProjectReadOnlyTokenAccessIds':
|
||||
src.tokenAccessReadAndWrite_refs,
|
||||
'deleterData.deletedProjectLastUpdatedAt': src.lastUpdated
|
||||
}
|
||||
},
|
||||
cb
|
||||
)
|
||||
} else {
|
||||
cb()
|
||||
}
|
||||
},
|
||||
err => {
|
||||
if (err) {
|
||||
throw err
|
||||
}
|
||||
process.exit(0)
|
||||
}
|
||||
)
|
||||
}
|
||||
)
|
||||
@@ -0,0 +1,97 @@
|
||||
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)
|
||||
})
|
||||
Reference in New Issue
Block a user