fix some error

This commit is contained in:
songtianlun 2025-08-27 07:14:38 +08:00
parent 78e435f60c
commit 8c12ec72a1

View File

@ -13,14 +13,16 @@ export async function POST() {
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
} }
// 检查用户是否存在于Prisma数据库中 // 检查用户是否存在
const existingUser = await prisma.user.findUnique({ let user = await prisma.user.findUnique({
where: { id: supabaseUser.id } 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 }, where: { id: supabaseUser.id },
data: { data: {
email: supabaseUser.email!, email: supabaseUser.email!,
@ -31,40 +33,68 @@ export async function POST() {
updatedAt: new Date() updatedAt: new Date()
} }
}) })
return NextResponse.json({
message: 'User updated successfully',
user: updatedUser
})
} else { } else {
// 用户不存在,创建新用户 // 用户不存在,需要创建
const newUser = await prisma.user.create({ try {
data: { user = await prisma.user.create({
id: supabaseUser.id, data: {
email: supabaseUser.email!, id: supabaseUser.id,
username: supabaseUser.user_metadata?.username || supabaseUser.user_metadata?.full_name || null, email: supabaseUser.email!,
avatar: supabaseUser.user_metadata?.avatar_url || null, username: supabaseUser.user_metadata?.username || supabaseUser.user_metadata?.full_name || null,
bio: supabaseUser.user_metadata?.bio || null, avatar: supabaseUser.user_metadata?.avatar_url || null,
language: supabaseUser.user_metadata?.language || 'en' 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个月后过期 // 为新用户添加系统赠送的5USD信用额度1个月后过期
const expiresAt = new Date() const expiresAt = new Date()
expiresAt.setMonth(expiresAt.getMonth() + 1) expiresAt.setMonth(expiresAt.getMonth() + 1)
await addCredit( try {
newUser.id, await addCredit(
5.0, user.id,
'system_gift', 5.0,
'系统赠送 - 新用户礼包', 'system_gift',
expiresAt '系统赠送 - 新用户礼包',
) expiresAt
)
console.log(`Added welcome credit for new user: ${user.id}`)
} catch (creditError) {
console.error('Failed to add welcome credit:', creditError)
// 不影响用户创建流程
}
return NextResponse.json({ return NextResponse.json({
message: 'User created successfully', message: 'User created successfully',
user: newUser user
}, { status: 201 }) }, { status: 201 })
} else {
return NextResponse.json({
message: 'User updated successfully',
user
})
} }
} catch (error) { } catch (error) {