From e8f971b54e2f263a366bdfcd6b872521607658a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Patrick=20M=C3=BCller?= Date: Mon, 21 Sep 2026 23:01:22 +0200 Subject: [PATCH] Fix issue where email would still be required for personalized vouchers in the backend --- src/models/tickets/admin/vouchers.admin.router.ts | 3 ++- src/models/tickets/admin/vouchers.admin.service.ts | 8 ++++---- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/src/models/tickets/admin/vouchers.admin.router.ts b/src/models/tickets/admin/vouchers.admin.router.ts index 427c305..17f9e81 100644 --- a/src/models/tickets/admin/vouchers.admin.router.ts +++ b/src/models/tickets/admin/vouchers.admin.router.ts @@ -129,12 +129,13 @@ vouchersAdminRouter.post('/wildcard', async (req: Request, res: Response) => { * type: array * items: * type: object - * required: [name, email, eventIds] + * required: [name, eventIds] * properties: * name: * type: string * email: * type: string + * description: Optional - a guest can supply their own email when redeeming. * eventIds: * type: array * items: diff --git a/src/models/tickets/admin/vouchers.admin.service.ts b/src/models/tickets/admin/vouchers.admin.service.ts index feb9953..9824cf2 100644 --- a/src/models/tickets/admin/vouchers.admin.service.ts +++ b/src/models/tickets/admin/vouchers.admin.service.ts @@ -123,10 +123,10 @@ export const generatePersonalizedBatch = async (rows: PersonalizedRowInput[], cr throw new Error('at least one row is required'); } for (const row of rows) { - if (!row.name || !row.email || row.eventIds.length === 0) { - throw new Error('each row requires a name, email, and at least one eligible event'); + if (!row.name || row.eventIds.length === 0) { + throw new Error('each row requires a name and at least one eligible event'); } - if (!isValidEmail(row.email)) { + if (row.email && !isValidEmail(row.email)) { throw new Error(`"${row.email}" does not look like a valid email address`); } } @@ -147,7 +147,7 @@ export const generatePersonalizedBatch = async (rows: PersonalizedRowInput[], cr codes.push(code); await conn.query( 'INSERT INTO voucher_codes (code, status, max_guests, prefill_name, prefill_email, batch_id, created_by_email) VALUES (?,?,?,?,?,?,?)', - [code, 'UNUSED', row.maxGuests, row.name, row.email, batchId, createdByEmail] + [code, 'UNUSED', row.maxGuests, row.name, row.email || null, batchId, createdByEmail] ); for (const eventId of row.eventIds) { await conn.query('INSERT INTO voucher_code_events (code, event_id) VALUES (?,?)', [code, eventId]); -- 2.52.0