feat(server): rename contributionTier → contributionAmount in routes + utils
This commit is contained in:
parent
7a2acd4628
commit
57f5152be4
18 changed files with 35 additions and 35 deletions
|
|
@ -17,9 +17,9 @@ export default defineEventHandler(async (event) => {
|
||||||
})
|
})
|
||||||
|
|
||||||
// Calculate monthly revenue from member contributions
|
// Calculate monthly revenue from member contributions
|
||||||
const members = await Member.find({}, 'contributionTier').lean()
|
const members = await Member.find({}, 'contributionAmount').lean()
|
||||||
const monthlyRevenue = members.reduce((total, member) => {
|
const monthlyRevenue = members.reduce((total, member) => {
|
||||||
return total + parseInt(member.contributionTier || '0')
|
return total + (member.contributionAmount || 0)
|
||||||
}, 0)
|
}, 0)
|
||||||
|
|
||||||
const pendingSlackInvites = await Member.countDocuments({ slackInvited: false })
|
const pendingSlackInvites = await Member.countDocuments({ slackInvited: false })
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ export default defineEventHandler(async (event) => {
|
||||||
name: body.name,
|
name: body.name,
|
||||||
email: body.email,
|
email: body.email,
|
||||||
circle: body.circle,
|
circle: body.circle,
|
||||||
contributionTier: body.contributionTier,
|
contributionAmount: body.contributionAmount,
|
||||||
slackInvited: false
|
slackInvited: false
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ export default defineEventHandler(async (event) => {
|
||||||
name: body.name,
|
name: body.name,
|
||||||
email: body.email,
|
email: body.email,
|
||||||
circle: body.circle,
|
circle: body.circle,
|
||||||
contributionTier: body.contributionTier,
|
contributionAmount: body.contributionAmount,
|
||||||
status: body.status,
|
status: body.status,
|
||||||
}, { new: true })
|
}, { new: true })
|
||||||
|
|
||||||
|
|
@ -35,7 +35,7 @@ export default defineEventHandler(async (event) => {
|
||||||
if (existing.name !== body.name) changedFields.push('name')
|
if (existing.name !== body.name) changedFields.push('name')
|
||||||
if (existing.email !== body.email) changedFields.push('email')
|
if (existing.email !== body.email) changedFields.push('email')
|
||||||
if (existing.circle !== body.circle) changedFields.push('circle')
|
if (existing.circle !== body.circle) changedFields.push('circle')
|
||||||
if (existing.contributionTier !== body.contributionTier) changedFields.push('contributionTier')
|
if (existing.contributionAmount !== body.contributionAmount) changedFields.push('contributionAmount')
|
||||||
if (existing.status !== body.status) changedFields.push('status')
|
if (existing.status !== body.status) changedFields.push('status')
|
||||||
|
|
||||||
if (changedFields.length) {
|
if (changedFields.length) {
|
||||||
|
|
@ -58,7 +58,7 @@ export default defineEventHandler(async (event) => {
|
||||||
name: updated.name,
|
name: updated.name,
|
||||||
email: updated.email,
|
email: updated.email,
|
||||||
circle: updated.circle,
|
circle: updated.circle,
|
||||||
contributionTier: updated.contributionTier,
|
contributionAmount: updated.contributionAmount,
|
||||||
status: updated.status,
|
status: updated.status,
|
||||||
role: updated.role,
|
role: updated.role,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ export default defineEventHandler(async (event) => {
|
||||||
name: row.name,
|
name: row.name,
|
||||||
email: row.email,
|
email: row.email,
|
||||||
circle: row.circle,
|
circle: row.circle,
|
||||||
contributionTier: row.contributionTier,
|
contributionAmount: row.contributionAmount,
|
||||||
slackInvited: false
|
slackInvited: false
|
||||||
})
|
})
|
||||||
const saved = await member.save()
|
const saved = await member.save()
|
||||||
|
|
|
||||||
|
|
@ -11,10 +11,10 @@ export default defineEventHandler(async (event) => {
|
||||||
status: member.status,
|
status: member.status,
|
||||||
role: member.role || 'member',
|
role: member.role || 'member',
|
||||||
circle: member.circle,
|
circle: member.circle,
|
||||||
contributionTier: member.contributionTier,
|
contributionAmount: member.contributionAmount,
|
||||||
billingCadence: member.billingCadence,
|
billingCadence: member.billingCadence,
|
||||||
helcimCustomerId: member.helcimCustomerId,
|
helcimCustomerId: member.helcimCustomerId,
|
||||||
membershipLevel: `${member.circle}-${member.contributionTier}`,
|
membershipLevel: `${member.circle}-${member.contributionAmount}`,
|
||||||
// Profile fields
|
// Profile fields
|
||||||
pronouns: member.pronouns,
|
pronouns: member.pronouns,
|
||||||
timeZone: member.timeZone,
|
timeZone: member.timeZone,
|
||||||
|
|
|
||||||
|
|
@ -30,8 +30,8 @@ export default defineEventHandler(async (event) => {
|
||||||
name: member.name,
|
name: member.name,
|
||||||
circle: member.circle,
|
circle: member.circle,
|
||||||
status: member.status,
|
status: member.status,
|
||||||
contributionTier: member.contributionTier,
|
contributionAmount: member.contributionAmount,
|
||||||
membershipLevel: `${member.circle}-${member.contributionTier}`
|
membershipLevel: `${member.circle}-${member.contributionAmount}`
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ export default defineEventHandler(async (event) => {
|
||||||
$setOnInsert: {
|
$setOnInsert: {
|
||||||
name: "Test Admin",
|
name: "Test Admin",
|
||||||
circle: "founder",
|
circle: "founder",
|
||||||
contributionTier: "0",
|
contributionAmount: 0,
|
||||||
role: "admin",
|
role: "admin",
|
||||||
status: "active",
|
status: "active",
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,7 @@ export default defineEventHandler(async (event) => {
|
||||||
eventData.registrations.push({
|
eventData.registrations.push({
|
||||||
name: body.name,
|
name: body.name,
|
||||||
email: body.email.toLowerCase(),
|
email: body.email.toLowerCase(),
|
||||||
membershipLevel: `${member.circle}-${member.contributionTier}`,
|
membershipLevel: `${member.circle}-${member.contributionAmount}`,
|
||||||
isMember: true,
|
isMember: true,
|
||||||
paymentStatus: 'not_required',
|
paymentStatus: 'not_required',
|
||||||
amountPaid: 0
|
amountPaid: 0
|
||||||
|
|
|
||||||
|
|
@ -97,7 +97,7 @@ export default defineEventHandler(async (event) => {
|
||||||
|
|
||||||
if (memberHasAccess) {
|
if (memberHasAccess) {
|
||||||
isMember = true;
|
isMember = true;
|
||||||
membershipLevel = `${member.circle}-${member.contributionTier}`;
|
membershipLevel = `${member.circle}-${member.contributionAmount}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add registration
|
// Add registration
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ export default defineEventHandler(async (event) => {
|
||||||
// Check if user is a member
|
// Check if user is a member
|
||||||
const member = await Member.findOne({
|
const member = await Member.findOne({
|
||||||
email: body.email.toLowerCase(),
|
email: body.email.toLowerCase(),
|
||||||
}).select("email name circle contributionTier");
|
}).select("email name circle contributionAmount");
|
||||||
|
|
||||||
if (!member) {
|
if (!member) {
|
||||||
return {
|
return {
|
||||||
|
|
@ -28,7 +28,7 @@ export default defineEventHandler(async (event) => {
|
||||||
eligibleForMemberPricing: true,
|
eligibleForMemberPricing: true,
|
||||||
memberInfo: {
|
memberInfo: {
|
||||||
circle: member.circle,
|
circle: member.circle,
|
||||||
tier: member.contributionTier,
|
amount: member.contributionAmount,
|
||||||
name: member.name,
|
name: member.name,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -101,7 +101,7 @@ export default defineEventHandler(async (event) => {
|
||||||
email: body.email.toLowerCase(),
|
email: body.email.toLowerCase(),
|
||||||
name: body.name,
|
name: body.name,
|
||||||
circle: "community",
|
circle: "community",
|
||||||
contributionTier: "0",
|
contributionAmount: 0,
|
||||||
status: "guest",
|
status: "guest",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -117,7 +117,7 @@ export default defineEventHandler(async (event) => {
|
||||||
name: body.name,
|
name: body.name,
|
||||||
email: body.email.toLowerCase(),
|
email: body.email.toLowerCase(),
|
||||||
membershipLevel: memberHasAccess
|
membershipLevel: memberHasAccess
|
||||||
? `${member.circle}-${member.contributionTier}`
|
? `${member.circle}-${member.contributionAmount}`
|
||||||
: "non-member",
|
: "non-member",
|
||||||
isMember: memberHasAccess,
|
isMember: memberHasAccess,
|
||||||
ticketType: ticketInfo.ticketType,
|
ticketType: ticketInfo.ticketType,
|
||||||
|
|
|
||||||
|
|
@ -71,7 +71,7 @@ export default defineEventHandler(async (event) => {
|
||||||
const member = await Member.findOne({ email: email.toLowerCase() });
|
const member = await Member.findOne({ email: email.toLowerCase() });
|
||||||
if (member) {
|
if (member) {
|
||||||
memberName = memberName || member.name;
|
memberName = memberName || member.name;
|
||||||
memberLevel = `${member.circle}-${member.contributionTier}`;
|
memberLevel = `${member.circle}-${member.contributionAmount}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add to waitlist
|
// Add to waitlist
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ export default defineEventHandler(async (event) => {
|
||||||
email: body.email,
|
email: body.email,
|
||||||
name: body.name,
|
name: body.name,
|
||||||
circle: body.circle,
|
circle: body.circle,
|
||||||
contributionTier: body.contributionTier,
|
contributionAmount: body.contributionAmount,
|
||||||
helcimCustomerId: customerData.id,
|
helcimCustomerId: customerData.id,
|
||||||
status: 'pending_payment',
|
status: 'pending_payment',
|
||||||
agreement: { acceptedAt: new Date() }
|
agreement: { acceptedAt: new Date() }
|
||||||
|
|
@ -46,7 +46,7 @@ export default defineEventHandler(async (event) => {
|
||||||
email: member.email,
|
email: member.email,
|
||||||
name: member.name,
|
name: member.name,
|
||||||
circle: member.circle,
|
circle: member.circle,
|
||||||
contributionTier: member.contributionTier,
|
contributionAmount: member.contributionAmount,
|
||||||
status: member.status
|
status: member.status
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -43,9 +43,9 @@ export default defineEventHandler(async (event) => {
|
||||||
pronouns: body.pronouns || undefined,
|
pronouns: body.pronouns || undefined,
|
||||||
location: body.location || undefined,
|
location: body.location || undefined,
|
||||||
circle: body.circle,
|
circle: body.circle,
|
||||||
contributionTier: body.contributionTier,
|
contributionAmount: body.contributionAmount,
|
||||||
bio: body.motivation || undefined,
|
bio: body.motivation || undefined,
|
||||||
status: body.contributionTier === '0' ? 'active' : 'pending_payment',
|
status: body.contributionAmount === 0 ? 'active' : 'pending_payment',
|
||||||
agreement: { acceptedAt: new Date() },
|
agreement: { acceptedAt: new Date() },
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
@ -66,7 +66,7 @@ export default defineEventHandler(async (event) => {
|
||||||
})
|
})
|
||||||
|
|
||||||
// For free tier, issue session and redirect to welcome
|
// For free tier, issue session and redirect to welcome
|
||||||
if (body.contributionTier === '0') {
|
if (body.contributionAmount === 0) {
|
||||||
const sessionToken = jwt.sign(
|
const sessionToken = jwt.sign(
|
||||||
{ memberId: member._id, email: member.email, tv: member.tokenVersion },
|
{ memberId: member._id, email: member.email, tv: member.tokenVersion },
|
||||||
config.jwtSecret,
|
config.jwtSecret,
|
||||||
|
|
@ -90,7 +90,7 @@ export default defineEventHandler(async (event) => {
|
||||||
email: member.email,
|
email: member.email,
|
||||||
name: member.name,
|
name: member.name,
|
||||||
circle: member.circle,
|
circle: member.circle,
|
||||||
contributionTier: member.contributionTier,
|
contributionAmount: member.contributionAmount,
|
||||||
status: member.status,
|
status: member.status,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -105,7 +105,7 @@ export default defineEventHandler(async (event) => {
|
||||||
email: member.email,
|
email: member.email,
|
||||||
name: member.name,
|
name: member.name,
|
||||||
circle: member.circle,
|
circle: member.circle,
|
||||||
contributionTier: member.contributionTier,
|
contributionAmount: member.contributionAmount,
|
||||||
status: member.status,
|
status: member.status,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,12 +7,12 @@ export default defineEventHandler(async (event) => {
|
||||||
const member = await requireAuth(event);
|
const member = await requireAuth(event);
|
||||||
|
|
||||||
// If already on free tier, nothing to cancel
|
// If already on free tier, nothing to cancel
|
||||||
if (member.contributionTier === "0" || !member.helcimSubscriptionId) {
|
if (member.contributionAmount === 0 || !member.helcimSubscriptionId) {
|
||||||
return {
|
return {
|
||||||
success: true,
|
success: true,
|
||||||
message: "No active subscription to cancel",
|
message: "No active subscription to cancel",
|
||||||
status: member.status,
|
status: member.status,
|
||||||
contributionTier: member.contributionTier,
|
contributionAmount: member.contributionAmount,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -29,7 +29,7 @@ export default defineEventHandler(async (event) => {
|
||||||
{
|
{
|
||||||
$set: {
|
$set: {
|
||||||
status: 'pending_payment',
|
status: 'pending_payment',
|
||||||
contributionTier: '0',
|
contributionAmount: 0,
|
||||||
helcimSubscriptionId: null,
|
helcimSubscriptionId: null,
|
||||||
paymentMethod: 'none',
|
paymentMethod: 'none',
|
||||||
subscriptionEndDate: new Date(),
|
subscriptionEndDate: new Date(),
|
||||||
|
|
@ -46,7 +46,7 @@ export default defineEventHandler(async (event) => {
|
||||||
success: true,
|
success: true,
|
||||||
message: "Subscription cancelled successfully",
|
message: "Subscription cancelled successfully",
|
||||||
status: 'pending_payment',
|
status: 'pending_payment',
|
||||||
contributionTier: '0',
|
contributionAmount: 0,
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Error cancelling subscription:", error);
|
console.error("Error cancelling subscription:", error);
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ async function inviteToSlack(member) {
|
||||||
member.name,
|
member.name,
|
||||||
member.email,
|
member.email,
|
||||||
member.circle,
|
member.circle,
|
||||||
member.contributionTier,
|
member.contributionAmount,
|
||||||
inviteResult.status
|
inviteResult.status
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -128,7 +128,7 @@ export default defineEventHandler(async (event) => {
|
||||||
email: member.email,
|
email: member.email,
|
||||||
name: member.name,
|
name: member.name,
|
||||||
circle: member.circle,
|
circle: member.circle,
|
||||||
contributionTier: member.contributionTier,
|
contributionAmount: member.contributionAmount,
|
||||||
status: member.status
|
status: member.status
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ export default defineEventHandler(async (event) => {
|
||||||
email: member.email,
|
email: member.email,
|
||||||
name: member.name,
|
name: member.name,
|
||||||
circle: member.circle,
|
circle: member.circle,
|
||||||
contributionTier: member.contributionTier,
|
contributionAmount: member.contributionAmount,
|
||||||
pronouns: member.pronouns,
|
pronouns: member.pronouns,
|
||||||
timeZone: member.timeZone,
|
timeZone: member.timeZone,
|
||||||
avatar: member.avatar,
|
avatar: member.avatar,
|
||||||
|
|
|
||||||
|
|
@ -181,7 +181,7 @@ export class SlackService {
|
||||||
memberName: string,
|
memberName: string,
|
||||||
memberEmail: string,
|
memberEmail: string,
|
||||||
circle: string,
|
circle: string,
|
||||||
contributionTier: string,
|
contributionAmount: number,
|
||||||
invitationStatus: string = "manual_invitation_required",
|
invitationStatus: string = "manual_invitation_required",
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
try {
|
try {
|
||||||
|
|
@ -240,7 +240,7 @@ export class SlackService {
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: "mrkdwn",
|
type: "mrkdwn",
|
||||||
text: `*Contribution:*\n$${contributionTier}/month`,
|
text: `*Contribution:*\n$${contributionAmount}/month`,
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue