Add series management and ticketing features: Introduce series event functionality in event creation, enhance event display with series information, and implement ticketing options for public events. Update layouts and improve form handling for better user experience.

This commit is contained in:
Jennie Robinson Faber 2025-08-27 20:40:54 +01:00
parent c3a29fa47c
commit a88aa62198
24 changed files with 2897 additions and 44 deletions

View file

@ -65,27 +65,41 @@ export default defineEventHandler(async (event) => {
})
}
// Check member status if event is members-only
if (eventData.membersOnly && body.membershipLevel === 'non-member') {
// Check if email belongs to a member
const member = await Member.findOne({ email: body.email.toLowerCase() })
if (!member) {
throw createError({
statusCode: 403,
statusMessage: 'This event is for members only. Please become a member to register.'
})
}
// Update membership level from database
body.membershipLevel = `${member.circle}-${member.contributionTier}`
// Check member status and handle different registration scenarios
const member = await Member.findOne({ email: body.email.toLowerCase() })
if (eventData.membersOnly && !member) {
throw createError({
statusCode: 403,
statusMessage: 'This event is for members only. Please become a member to register.'
})
}
// If event requires payment and user is not a member, redirect to payment flow
if (eventData.pricing.paymentRequired && !eventData.pricing.isFree && !member) {
throw createError({
statusCode: 402, // Payment Required
statusMessage: 'This event requires payment. Please use the payment registration endpoint.'
})
}
// Set member status and membership level
let isMember = false
let membershipLevel = 'non-member'
if (member) {
isMember = true
membershipLevel = `${member.circle}-${member.contributionTier}`
}
// Add registration
eventData.registrations.push({
name: body.name,
email: body.email.toLowerCase(),
membershipLevel: body.membershipLevel || 'non-member',
membershipLevel,
isMember,
paymentStatus: 'not_required', // Free events or member registrations
amountPaid: 0,
dietary: body.dietary || false,
registeredAt: new Date()
})