From 198c216b4429baee3132136372c152e9e8c9f0f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rados=C5=82aw=20Gierwia=C5=82o?= Date: Fri, 21 Nov 2025 17:34:17 +0100 Subject: [PATCH] fix(backend): auto-create event ChatRoom on first check-in Problem: - User got "Chat room not found" error when trying to send messages - Event ChatRooms were only created by seed script, not for manually created events - Event "Another Dance Event" (ID: 420) was missing its ChatRoom Root Cause: - Seed script (seed.js:179-188) correctly creates ChatRooms for events - But events created outside of seed (CLI, manual DB insert) didn't create ChatRooms - Socket handler requires ChatRoom to exist before accepting messages Solution: 1. Added defensive check in check-in handler (POST /api/events/checkin/:token) 2. Automatically creates ChatRoom if missing when first user checks in 3. Logs creation for debugging: "Created missing chat room for event: {slug}" Impact: - Existing events without ChatRooms will get them on next check-in - Future manually-created events will work correctly - No breaking changes - all 223 tests pass Changes: - backend/src/routes/events.js: Added ChatRoom existence check and auto-creation logic (lines 256-272) Note: Manually created ChatRoom for event ID 420 to fix immediate issue --- backend/src/routes/events.js | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/backend/src/routes/events.js b/backend/src/routes/events.js index c326fcb..33099fb 100644 --- a/backend/src/routes/events.js +++ b/backend/src/routes/events.js @@ -253,6 +253,24 @@ router.post('/checkin/:token', authenticate, async (req, res, next) => { }); } + // Ensure event chat room exists (create if missing) + const existingChatRoom = await prisma.chatRoom.findFirst({ + where: { + eventId: event.id, + type: 'event', + }, + }); + + if (!existingChatRoom) { + await prisma.chatRoom.create({ + data: { + eventId: event.id, + type: 'event', + }, + }); + console.log(`✅ Created missing chat room for event: ${event.slug}`); + } + // Add user to event participants const participant = await prisma.eventParticipant.create({ data: {