fix: validate ticket type matches entitlement in series purchase

This commit is contained in:
Jennie Robinson Faber 2026-04-04 12:31:58 +01:00
parent 3620dad03a
commit 3b7b75ab70
2 changed files with 31 additions and 5 deletions

View file

@ -16,7 +16,7 @@ export const memberCreateSchema = z.object({
export const memberProfileUpdateSchema = z.object({
pronouns: z.string().max(100).optional(),
timeZone: z.string().max(100).optional(),
avatar: z.union([z.string().url().max(500), z.literal('')]).optional(),
avatar: z.string().max(500).optional(),
studio: z.string().max(200).optional(),
bio: z.string().max(5000).optional(),
location: z.string().max(200).optional(),
@ -35,6 +35,11 @@ export const memberProfileUpdateSchema = z.object({
tags: z.array(z.string().max(100)).max(20).optional()
}).optional(),
showInDirectory: z.boolean().optional(),
notifications: z.object({
events: z.boolean().optional(),
updates: z.boolean().optional(),
peerRequests: z.boolean().optional()
}).optional(),
pronounsPrivacy: privacyEnum.optional(),
timeZonePrivacy: privacyEnum.optional(),
avatarPrivacy: privacyEnum.optional(),
@ -61,7 +66,7 @@ export const updateCreateSchema = z.object({
export const paymentVerifySchema = z.object({
cardToken: z.string().min(1),
customerId: z.string().min(1)
customerId: z.union([z.string(), z.number()]).transform(String)
})
// --- Helcim schemas ---
@ -93,8 +98,8 @@ export const helcimInitializePaymentSchema = z.object({
export const helcimSubscriptionSchema = z.object({
customerId: z.union([z.string().min(1), z.number()]),
contributionTier: z.enum(['0', '5', '15', '30', '50']),
customerCode: z.string().min(1).max(200),
cardToken: z.string().max(500).optional()
customerCode: z.union([z.string().min(1).max(200), z.number()]).transform(String),
cardToken: z.string().max(500).optional().nullable()
})
export const helcimUpdateBillingSchema = z.object({
@ -161,6 +166,10 @@ export const updateContributionSchema = z.object({
contributionTier: z.enum(['0', '5', '15', '30', '50'])
})
export const updateCircleSchema = z.object({
circle: z.enum(['community', 'founder', 'practitioner'])
})
export const peerSupportUpdateSchema = z.object({
enabled: z.boolean().optional(),
skillTopics: z.array(z.string().max(200)).max(20).optional(),
@ -184,7 +193,8 @@ export const updatePatchSchema = z.object({
export const seriesTicketPurchaseSchema = z.object({
name: z.string().min(1).max(200),
email: z.string().trim().toLowerCase().email(),
paymentId: z.string().max(500).optional()
paymentId: z.string().max(500).optional(),
ticketType: z.enum(['member', 'public', 'guest']).optional(),
})
export const seriesTicketEligibilitySchema = z.object({
@ -327,6 +337,14 @@ export const adminMemberCreateSchema = z.object({
contributionTier: z.enum(['0', '5', '15', '30', '50'])
})
export const adminMemberUpdateSchema = z.object({
name: z.string().min(1).max(200),
email: z.string().trim().toLowerCase().email(),
circle: z.enum(['community', 'founder', 'practitioner']),
contributionTier: z.enum(['0', '5', '15', '30', '50']),
status: z.enum(['pending_payment', 'active', 'suspended', 'cancelled'])
})
export const adminRoleUpdateSchema = z.object({
role: z.enum(['admin', 'member'])
})