From d1a06699e5d6ae9b48ea90e008f0d76200543b4b Mon Sep 17 00:00:00 2001 From: Paul Bailey Date: Tue, 18 Nov 2025 18:15:33 +0000 Subject: [PATCH] fix: Auto-create users on profile access and make email nullable in types - Update getUserProfile, getUserReports, getUserEvents, and getUserActivity to call findOrCreateUser for Clerk IDs - This ensures users are automatically created in database when accessing their profile for the first time - Update User type to have email as 'string | null' instead of 'string' - Fixes 404 errors when new users try to access their profile This resolves the issue where new users signing up without email would get 404 errors when accessing their profile page. --- IMPLEMENTATION_COMPLETE.md | 0 server/src/services/userService.ts | 35 ++++++++++-------------------- src/types/index.ts | 2 +- 3 files changed, 12 insertions(+), 25 deletions(-) create mode 100644 IMPLEMENTATION_COMPLETE.md diff --git a/IMPLEMENTATION_COMPLETE.md b/IMPLEMENTATION_COMPLETE.md new file mode 100644 index 0000000..e69de29 diff --git a/server/src/services/userService.ts b/server/src/services/userService.ts index e5580ac..a3c7d57 100644 --- a/server/src/services/userService.ts +++ b/server/src/services/userService.ts @@ -66,6 +66,11 @@ export class UserService { // Check if this is a Clerk ID (starts with 'user_') const isClerkId = userId.startsWith('user_'); + // If it's a Clerk ID, ensure the user exists in our database + if (isClerkId) { + await this.findOrCreateUser(userId); + } + const user = await prisma.user.findUnique({ where: isClerkId ? { clerkId: userId } : { id: userId }, select: { @@ -174,14 +179,8 @@ export class UserService { let dbUserId = userId; if (isClerkId) { - const user = await prisma.user.findUnique({ - where: { clerkId: userId }, - select: { id: true }, - }); - if (!user) { - throw new Error('User not found'); - } - dbUserId = user.id; + // Ensure user exists in database + dbUserId = await this.findOrCreateUser(userId); } const reports = await prisma.report.findMany({ @@ -207,14 +206,8 @@ export class UserService { let dbUserId = userId; if (isClerkId) { - const user = await prisma.user.findUnique({ - where: { clerkId: userId }, - select: { id: true }, - }); - if (!user) { - throw new Error('User not found'); - } - dbUserId = user.id; + // Ensure user exists in database + dbUserId = await this.findOrCreateUser(userId); } // Get events user has registered for @@ -315,14 +308,8 @@ export class UserService { let dbUserId = userId; if (isClerkId) { - const user = await prisma.user.findUnique({ - where: { clerkId: userId }, - select: { id: true }, - }); - if (!user) { - throw new Error('User not found'); - } - dbUserId = user.id; + // Ensure user exists in database + dbUserId = await this.findOrCreateUser(userId); } // Get user's reports diff --git a/src/types/index.ts b/src/types/index.ts index 76593ba..72d732e 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -18,7 +18,7 @@ export interface Coordinates { export interface User { id: string; clerkId: string; - email: string; + email: string | null; username: string; firstName?: string; lastName?: string;