mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2025-07-23 23:00:08 +02:00

* Add script to update null references in for readOnly_refs and pendingReviewer_refs * update script to only update readOnly_refs * clean up * use projectAuditLogEntries to find relevant projects * use updateOne GitOrigin-RevId: bbeaa04b837ebb657c802598f0de72879f641bd0
175 lines
4.4 KiB
JavaScript
175 lines
4.4 KiB
JavaScript
import minimist from 'minimist'
|
|
import {
|
|
db,
|
|
ObjectId,
|
|
READ_PREFERENCE_SECONDARY,
|
|
} from '../app/src/infrastructure/mongodb.js'
|
|
import lodash from 'lodash'
|
|
|
|
const args = minimist(process.argv.slice(2), {
|
|
boolean: ['commit'],
|
|
})
|
|
|
|
const run = async () => {
|
|
try {
|
|
const projects = await db.projectAuditLogEntries
|
|
.find(
|
|
{
|
|
operation: 'collaborator-limit-exceeded',
|
|
timestamp: {
|
|
$gte: new Date('2025-03-26'),
|
|
$lt: new Date('2025-04-02'),
|
|
},
|
|
},
|
|
{
|
|
readPreference: READ_PREFERENCE_SECONDARY,
|
|
projection: {
|
|
_id: 1,
|
|
projectId: 1,
|
|
},
|
|
}
|
|
)
|
|
.toArray()
|
|
|
|
const uniqueProjectIds = lodash.uniq(
|
|
projects.map(p => p.projectId.toString())
|
|
)
|
|
|
|
console.log(
|
|
`Found ${uniqueProjectIds.length} projects where collaborator-limit-exceeded operation was logged in provided date range`
|
|
)
|
|
|
|
let readOnlyCount = 0
|
|
let pendingReviewerCount = 0
|
|
let reviewerCount = 0
|
|
|
|
for (const projectId of uniqueProjectIds) {
|
|
if (args.commit) {
|
|
const readOnlyUpdate = await db.projects.updateOne(
|
|
{
|
|
_id: new ObjectId(projectId),
|
|
readOnly_refs: null,
|
|
},
|
|
{
|
|
$set: {
|
|
readOnly_refs: [],
|
|
},
|
|
}
|
|
)
|
|
if (readOnlyUpdate.modifiedCount > 0) {
|
|
console.log(`Updated readOnly_refs for project id ${projectId}`)
|
|
}
|
|
readOnlyCount += readOnlyUpdate.modifiedCount
|
|
} else {
|
|
const project = await db.projects.findOne(
|
|
{
|
|
_id: new ObjectId(projectId),
|
|
readOnly_refs: null,
|
|
},
|
|
{
|
|
projection: {
|
|
_id: 1,
|
|
readOnly_refs: 1,
|
|
},
|
|
}
|
|
)
|
|
if (project) {
|
|
readOnlyCount++
|
|
console.log(
|
|
`Dry run: Would update readOnly_refs for project id ${projectId}`
|
|
)
|
|
}
|
|
}
|
|
|
|
if (args.commit) {
|
|
const pendingReviewerUpdate = await db.projects.updateOne(
|
|
{
|
|
_id: new ObjectId(projectId),
|
|
pendingReviewer_refs: null,
|
|
},
|
|
{
|
|
$set: {
|
|
pendingReviewer_refs: [],
|
|
},
|
|
}
|
|
)
|
|
if (pendingReviewerUpdate.modifiedCount > 0) {
|
|
console.log(
|
|
`Updated pendingReviewer_refs for project id ${projectId}`
|
|
)
|
|
}
|
|
pendingReviewerCount += pendingReviewerUpdate.modifiedCount
|
|
} else {
|
|
const project = await db.projects.findOne(
|
|
{
|
|
_id: new ObjectId(projectId),
|
|
pendingReviewer_refs: null,
|
|
},
|
|
{
|
|
projection: {
|
|
_id: 1,
|
|
pendingReviewer_refs: 1,
|
|
},
|
|
}
|
|
)
|
|
if (project) {
|
|
pendingReviewerCount++
|
|
console.log(
|
|
`Dry run: Would update pendingReviewer_refs for project id ${projectId}`
|
|
)
|
|
}
|
|
}
|
|
|
|
if (args.commit) {
|
|
const reviewerUpdate = await db.projects.updateOne(
|
|
{
|
|
_id: new ObjectId(projectId),
|
|
reviewer_refs: null,
|
|
},
|
|
{
|
|
$set: {
|
|
reviewer_refs: [],
|
|
},
|
|
}
|
|
)
|
|
reviewerCount += reviewerUpdate.modifiedCount
|
|
} else {
|
|
const project = await db.projects.findOne(
|
|
{
|
|
_id: new ObjectId(projectId),
|
|
reviewer_refs: null,
|
|
},
|
|
{
|
|
projection: {
|
|
_id: 1,
|
|
reviewer_refs: 1,
|
|
},
|
|
}
|
|
)
|
|
if (project) {
|
|
reviewerCount++
|
|
console.log(
|
|
`Dry run: Would update reviewer_refs for project id ${projectId}`
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
if (args.commit) {
|
|
console.log(
|
|
`Updated readOnly_refs for ${readOnlyCount} projects, pendingReviewer_refs for ${pendingReviewerCount} projects, and reviewer_refs for ${reviewerCount} projects.`
|
|
)
|
|
} else {
|
|
console.log(
|
|
`Dry run: Would update readOnly_refs for ${readOnlyCount} projects, pendingReviewer_refs for ${pendingReviewerCount} projects, and reviewer_refs for ${reviewerCount} projects.`
|
|
)
|
|
}
|
|
|
|
process.exit(0)
|
|
} catch (err) {
|
|
console.error('Error while processing projects:', err)
|
|
process.exit(1)
|
|
}
|
|
}
|
|
|
|
run()
|