mirror of
https://github.com/overleaf/overleaf.git
synced 2024-12-28 06:42:17 +00:00
Merge pull request #11781 from overleaf/tm-merge-group-subscription-members-script
Add script to merge group subscription members GitOrigin-RevId: 4a3633320624e0c0514ed58cf792f2a921b0867a
This commit is contained in:
parent
0b82db0abe
commit
c52799798d
1 changed files with 104 additions and 0 deletions
104
services/web/scripts/merge_group_subscription_members.js
Normal file
104
services/web/scripts/merge_group_subscription_members.js
Normal file
|
@ -0,0 +1,104 @@
|
|||
// 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)
|
||||
})
|
Loading…
Reference in a new issue