| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- // 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(new ObjectId(target))
- const sourceSubscription = await getSubscription(new 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)
- })
|