mirror of
https://github.com/overleaf/overleaf.git
synced 2024-11-29 18:43:42 -05:00
105 lines
2.7 KiB
JavaScript
105 lines
2.7 KiB
JavaScript
|
// dry run:
|
||
|
// node scripts/merge_group_subscription_members \
|
||
|
// --target [targetSubscriptionId] --source [sourceSubscriptionId]
|
||
|
//
|
||
|
// commit changes:
|
||
|
// node scripts/merge_group_subscription_members \
|
||
|
// --target [targetSubscriptionId] --source [sourceSubscriptionId] --commit
|
||
|
|
||
|
const { db, ObjectId, waitForDb } = require('../app/src/infrastructure/mongodb')
|
||
|
const SubscriptionUpdater = require('../app/src/Features/Subscription/SubscriptionUpdater')
|
||
|
const minimist = require('minimist')
|
||
|
const argv = minimist(process.argv.slice(2), {
|
||
|
string: ['target', 'source'],
|
||
|
boolean: ['commit'],
|
||
|
})
|
||
|
const { target, source, commit } = argv
|
||
|
|
||
|
async function getSubscription(subscriptionId) {
|
||
|
const projection = {
|
||
|
member_ids: 1,
|
||
|
membersLimit: 1,
|
||
|
groupPlan: 1,
|
||
|
teamName: 1,
|
||
|
}
|
||
|
return await db.subscriptions.findOne(
|
||
|
{
|
||
|
_id: subscriptionId,
|
||
|
},
|
||
|
{ projection }
|
||
|
)
|
||
|
}
|
||
|
|
||
|
async function main() {
|
||
|
if (!target) {
|
||
|
throw new Error('missing --target argument')
|
||
|
}
|
||
|
if (!source) {
|
||
|
throw new Error('missing --source argument')
|
||
|
}
|
||
|
|
||
|
if (!commit) {
|
||
|
console.log('Doing dry run without --commit')
|
||
|
}
|
||
|
|
||
|
await waitForDb()
|
||
|
|
||
|
const targetSubscription = await getSubscription(ObjectId(target))
|
||
|
const sourceSubscription = await getSubscription(ObjectId(source))
|
||
|
|
||
|
if (!targetSubscription) {
|
||
|
throw new Error('couldnt find target (to) subscription')
|
||
|
}
|
||
|
if (!sourceSubscription) {
|
||
|
throw new Error('couldnt find source (from) subscription')
|
||
|
}
|
||
|
|
||
|
console.log(
|
||
|
`\nTarget/destination subscription (${targetSubscription.member_ids.length} members) is:`,
|
||
|
targetSubscription
|
||
|
)
|
||
|
console.log(
|
||
|
`\nSource subscription (${sourceSubscription.member_ids.length} members) is:`,
|
||
|
sourceSubscription
|
||
|
)
|
||
|
|
||
|
if (!targetSubscription.groupPlan || !sourceSubscription.groupPlan) {
|
||
|
throw new Error('both subscriptions must be group subscriptions')
|
||
|
}
|
||
|
|
||
|
let addCount = 0
|
||
|
for (const member of sourceSubscription.member_ids) {
|
||
|
const exists = targetSubscription.member_ids.find(m => {
|
||
|
return m.toString() === member.toString()
|
||
|
})
|
||
|
if (!exists) {
|
||
|
console.log(`adding ${member} to target ${targetSubscription._id}`)
|
||
|
addCount += 1
|
||
|
if (commit) {
|
||
|
await SubscriptionUpdater.promises.addUserToGroup(
|
||
|
targetSubscription._id,
|
||
|
member
|
||
|
)
|
||
|
}
|
||
|
} else {
|
||
|
console.log(`skipping ${member}, already exists in target`)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
console.log(`Added ${addCount} users to target subscription`)
|
||
|
|
||
|
if (!commit) {
|
||
|
console.log('Run again with --commit to make the above changes')
|
||
|
}
|
||
|
}
|
||
|
|
||
|
main()
|
||
|
.then(() => {
|
||
|
console.error('Done.')
|
||
|
process.exit(0)
|
||
|
})
|
||
|
.catch(error => {
|
||
|
console.error({ error })
|
||
|
process.exit(1)
|
||
|
})
|