fix some error
This commit is contained in:
parent
78e435f60c
commit
8c12ec72a1
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user