Extract shared SignupFlowOverlay component. Static "Monthly Contribution" label on all three contribution inputs (was misleadingly dynamic). "Per Year"/"Per Month" toggle copy; Per Year default on accept-invite, Per Month default on join. Live billing-summary card on both signup flows. Welcome-heading on dashboard via ?welcome=1 for new signups. $0-member polish on account page (hide payment-history + Solidarity Fund prompts). State-aware contribution-change hint. Invite accept now creates Helcim customer and sets auth cookie server-side for both free and paid branches. Pre-registrant invite + /join signup flows manually verified against Cleo Nguyen preReg and $0-$50 variants.
34 lines
1.1 KiB
JavaScript
34 lines
1.1 KiB
JavaScript
require('dotenv').config()
|
|
const mongoose = require('mongoose')
|
|
|
|
;(async () => {
|
|
await mongoose.connect(process.env.MONGODB_URI)
|
|
const db = mongoose.connection.db
|
|
|
|
const email = 'jennie+cleonguyen@machinemagic.co'
|
|
|
|
const memberRes = await db.collection('members').deleteOne({ email })
|
|
console.log(`Deleted ${memberRes.deletedCount} member(s)`)
|
|
|
|
const preRegRes = await db.collection('preregistrations').updateOne(
|
|
{ email },
|
|
{
|
|
$set: { status: 'pending', magicLinkJtiUsed: false },
|
|
$unset: { acceptedAt: '', memberId: '' },
|
|
}
|
|
)
|
|
console.log(`Reset ${preRegRes.modifiedCount} preRegistration(s)`)
|
|
|
|
const member = await db.collection('members').findOne({ email })
|
|
console.log('\nMember state after reset:')
|
|
console.log(JSON.stringify(member, null, 2))
|
|
|
|
const preReg = await db.collection('preregistrations').findOne(
|
|
{ email },
|
|
{ projection: { email: 1, status: 1, acceptedAt: 1, memberId: 1, magicLinkJtiUsed: 1 } }
|
|
)
|
|
console.log('\nPreRegistration state after reset:')
|
|
console.log(JSON.stringify(preReg, null, 2))
|
|
|
|
await mongoose.disconnect()
|
|
})()
|