From 7364e12c86bfa144ffff6d919b0e97b595f443bb Mon Sep 17 00:00:00 2001 From: Ryderjj89 Date: Mon, 5 May 2025 08:31:29 -0400 Subject: [PATCH] fix: add @types/nodemailer and include event links in RSVP email content --- backend/package.json | 1 + backend/src/email.ts | 9 +++++++++ backend/src/index.ts | 6 ++++-- docker-compose.yml | 1 + 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/backend/package.json b/backend/package.json index e33543c..9f63381 100644 --- a/backend/package.json +++ b/backend/package.json @@ -22,6 +22,7 @@ "@types/node": "^20.4.5", "@types/cors": "^2.8.13", "@types/sqlite3": "^3.1.8", + "@types/nodemailer": "^6.4.12", "typescript": "^5.1.6", "nodemon": "^3.0.1", "ts-node": "^10.9.1" diff --git a/backend/src/email.ts b/backend/src/email.ts index 2648c71..48445b8 100644 --- a/backend/src/email.ts +++ b/backend/src/email.ts @@ -12,6 +12,7 @@ const transporter = nodemailer.createTransport({ export interface RSVPEmailData { eventTitle: string; + eventSlug: string; name: string; attending: string; bringingGuests: string; @@ -25,6 +26,7 @@ export interface RSVPEmailData { export async function sendRSVPEmail(data: RSVPEmailData) { const { eventTitle, + eventSlug, name, attending, bringingGuests, @@ -40,6 +42,11 @@ export async function sendRSVPEmail(data: RSVPEmailData) { const itemsList = itemsBringing.length ? itemsBringing.join(', ') : 'None'; const otherItemsList = otherItems ? otherItems : 'None'; + // Assume the frontend is served at the same host + const baseUrl = process.env.FRONTEND_BASE_URL || ''; + const manageRsvpsUrl = `${baseUrl}/events/${eventSlug}/manage-rsvps`; + const viewRsvpsUrl = `${baseUrl}/events/${eventSlug}/rsvps`; + const html = `

RSVP Confirmation

Event: ${eventTitle}

@@ -49,6 +56,8 @@ export async function sendRSVPEmail(data: RSVPEmailData) {

Guest Names: ${guestList}

Items Bringing (from needed list): ${itemsList}

Other Items: ${otherItemsList}

+

Manage RSVPs for this event

+

View all RSVPs for this event

`; await transporter.sendMail({ diff --git a/backend/src/index.ts b/backend/src/index.ts index 7993c5d..164ceb5 100644 --- a/backend/src/index.ts +++ b/backend/src/index.ts @@ -295,15 +295,17 @@ app.post('/api/events/:slug/rsvp', async (req: Request, res: Response) => { [eventId, name, attending, bringing_guests, guest_count, JSON.stringify(parsedGuestNames), JSON.stringify(parsedItemsBringing), other_items || ''] ); - // Fetch event title for the email - const eventInfo = await db.get('SELECT title FROM events WHERE id = ?', [eventId]); + // Fetch event title and slug for the email + const eventInfo = await db.get('SELECT title, slug FROM events WHERE id = ?', [eventId]); const eventTitle = eventInfo ? eventInfo.title : slug; + const eventSlug = eventInfo ? eventInfo.slug : slug; // Send RSVP confirmation email (if email provided) if (req.body.email) { try { await sendRSVPEmail({ eventTitle, + eventSlug, name, attending, bringingGuests: bringing_guests, diff --git a/docker-compose.yml b/docker-compose.yml index 222d0c8..f1ef5ff 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -16,6 +16,7 @@ services: - EMAIL_FROM_NAME=RSVP Manager - EMAIL_FROM_ADDRESS=your@email.com - EMAIL_SECURE=false + - FRONTEND_BASE_URL=https://your-frontend-domain.com restart: unless-stopped volumes: