From 8c12ec72a1be4416d0764e03aa4f5b16b4fc95d2 Mon Sep 17 00:00:00 2001 From: songtianlun Date: Wed, 27 Aug 2025 07:14:38 +0800 Subject: [PATCH] fix some error --- src/app/api/users/sync/route.ts | 84 ++++++++++++++++++++++----------- 1 file changed, 57 insertions(+), 27 deletions(-) diff --git a/src/app/api/users/sync/route.ts b/src/app/api/users/sync/route.ts index 79f6c18..b7058c5 100644 --- a/src/app/api/users/sync/route.ts +++ b/src/app/api/users/sync/route.ts @@ -13,14 +13,16 @@ export async function POST() { return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) } - // 检查用户是否已存在于Prisma数据库中 - const existingUser = await prisma.user.findUnique({ + // 先检查用户是否存在 + let user = await prisma.user.findUnique({ where: { id: supabaseUser.id } }) - if (existingUser) { + let isNewUser = false + + if (user) { // 用户已存在,更新信息 - const updatedUser = await prisma.user.update({ + user = await prisma.user.update({ where: { id: supabaseUser.id }, data: { email: supabaseUser.email!, @@ -31,40 +33,68 @@ export async function POST() { updatedAt: new Date() } }) - - return NextResponse.json({ - message: 'User updated successfully', - user: updatedUser - }) } else { - // 用户不存在,创建新用户 - const newUser = await prisma.user.create({ - data: { - id: supabaseUser.id, - email: supabaseUser.email!, - username: supabaseUser.user_metadata?.username || supabaseUser.user_metadata?.full_name || null, - avatar: supabaseUser.user_metadata?.avatar_url || null, - bio: supabaseUser.user_metadata?.bio || null, - language: supabaseUser.user_metadata?.language || 'en' + // 用户不存在,需要创建 + try { + user = await prisma.user.create({ + data: { + id: supabaseUser.id, + email: supabaseUser.email!, + username: supabaseUser.user_metadata?.username || supabaseUser.user_metadata?.full_name || null, + avatar: supabaseUser.user_metadata?.avatar_url || null, + bio: supabaseUser.user_metadata?.bio || null, + language: supabaseUser.user_metadata?.language || 'en', + subscriptionPlanId: 'free' + } + }) + isNewUser = true + } catch (createError: unknown) { + // 如果是唯一约束错误,可能是并发创建导致的 + const prismaError = createError as { code?: string } + if (prismaError.code === 'P2002') { + console.warn(`Concurrent user creation detected for ${supabaseUser.id}, fetching existing user`) + user = await prisma.user.findUnique({ + where: { id: supabaseUser.id } + }) + if (!user) { + throw createError // 如果还是找不到用户,重新抛出错误 + } + } else { + throw createError } - }) + } + } + // isNewUser 变量已经在上面定义了 + + if (isNewUser) { // 为新用户添加系统赠送的5USD信用额度(1个月后过期) const expiresAt = new Date() expiresAt.setMonth(expiresAt.getMonth() + 1) - await addCredit( - newUser.id, - 5.0, - 'system_gift', - '系统赠送 - 新用户礼包', - expiresAt - ) + try { + await addCredit( + user.id, + 5.0, + 'system_gift', + '系统赠送 - 新用户礼包', + expiresAt + ) + console.log(`Added welcome credit for new user: ${user.id}`) + } catch (creditError) { + console.error('Failed to add welcome credit:', creditError) + // 不影响用户创建流程 + } return NextResponse.json({ message: 'User created successfully', - user: newUser + user }, { status: 201 }) + } else { + return NextResponse.json({ + message: 'User updated successfully', + user + }) } } catch (error) {