fix topup
This commit is contained in:
parent
4eccc94a58
commit
78e435f60c
@ -1,6 +1,7 @@
|
||||
import { NextResponse } from 'next/server'
|
||||
import { createServerSupabaseClient } from '@/lib/supabase-server'
|
||||
import { createOrGetStripeCustomer, createPaymentSession } from '@/lib/stripe'
|
||||
import { prisma } from '@/lib/prisma'
|
||||
|
||||
export async function POST(request: Request) {
|
||||
try {
|
||||
@ -30,16 +31,26 @@ export async function POST(request: Request) {
|
||||
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
|
||||
}
|
||||
|
||||
// 获取用户信息
|
||||
const { data: userData, error: userError } = await supabase
|
||||
.from('users')
|
||||
.select('email, username')
|
||||
.eq('id', user.id)
|
||||
.single()
|
||||
|
||||
if (userError || !userData) {
|
||||
return NextResponse.json({ error: 'User not found' }, { status: 404 })
|
||||
}
|
||||
// 确保用户存在于数据库中,并获取用户信息
|
||||
const userData = await prisma.user.upsert({
|
||||
where: { id: user.id },
|
||||
update: {
|
||||
email: user.email || '',
|
||||
updatedAt: new Date()
|
||||
},
|
||||
create: {
|
||||
id: user.id,
|
||||
email: user.email || '',
|
||||
username: user.user_metadata?.username || null,
|
||||
subscriptionPlanId: 'free',
|
||||
createdAt: new Date(),
|
||||
updatedAt: new Date()
|
||||
},
|
||||
select: {
|
||||
email: true,
|
||||
username: true
|
||||
}
|
||||
})
|
||||
|
||||
try {
|
||||
// 创建或获取 Stripe 客户
|
||||
|
@ -1,6 +1,7 @@
|
||||
import { NextResponse } from 'next/server'
|
||||
import { createServerSupabaseClient } from '@/lib/supabase-server'
|
||||
import { addCredit } from '@/lib/services/credit'
|
||||
import { prisma } from '@/lib/prisma'
|
||||
|
||||
export async function POST(request: Request) {
|
||||
try {
|
||||
@ -37,6 +38,23 @@ export async function POST(request: Request) {
|
||||
// 开发环境:模拟充值成功
|
||||
console.log(`🧪 Development mode: Simulating top-up of $${amount} for user ${user.id}`)
|
||||
|
||||
// 确保用户存在于数据库中
|
||||
await prisma.user.upsert({
|
||||
where: { id: user.id },
|
||||
update: {
|
||||
email: user.email || '',
|
||||
updatedAt: new Date()
|
||||
},
|
||||
create: {
|
||||
id: user.id,
|
||||
email: user.email || '',
|
||||
username: user.user_metadata?.username || null,
|
||||
subscriptionPlanId: 'free',
|
||||
createdAt: new Date(),
|
||||
updatedAt: new Date()
|
||||
}
|
||||
})
|
||||
|
||||
const creditTransaction = await addCredit(
|
||||
user.id,
|
||||
amount,
|
||||
|
@ -2,6 +2,7 @@ import { NextResponse } from 'next/server'
|
||||
import { createServerSupabaseClient } from '@/lib/supabase-server'
|
||||
import { stripe } from '@/lib/stripe'
|
||||
import { addCredit } from '@/lib/services/credit'
|
||||
import { prisma } from '@/lib/prisma'
|
||||
|
||||
export async function GET(request: Request) {
|
||||
try {
|
||||
@ -53,13 +54,30 @@ export async function GET(request: Request) {
|
||||
)
|
||||
}
|
||||
|
||||
// 确保用户存在于数据库中
|
||||
await prisma.user.upsert({
|
||||
where: { id: user.id },
|
||||
update: {
|
||||
email: user.email || '',
|
||||
updatedAt: new Date()
|
||||
},
|
||||
create: {
|
||||
id: user.id,
|
||||
email: user.email || '',
|
||||
username: user.user_metadata?.username || null,
|
||||
subscriptionPlanId: 'free',
|
||||
createdAt: new Date(),
|
||||
updatedAt: new Date()
|
||||
}
|
||||
})
|
||||
|
||||
// 检查是否已经处理过这个支付会话
|
||||
const { data: existingCredit } = await supabase
|
||||
.from('credits')
|
||||
.select('id')
|
||||
.eq('referenceId', sessionId)
|
||||
.eq('referenceType', 'stripe_payment')
|
||||
.single()
|
||||
const existingCredit = await prisma.credit.findFirst({
|
||||
where: {
|
||||
referenceId: sessionId,
|
||||
referenceType: 'stripe_payment'
|
||||
}
|
||||
})
|
||||
|
||||
if (existingCredit) {
|
||||
// 已经处理过,直接返回成功
|
||||
@ -79,13 +97,13 @@ export async function GET(request: Request) {
|
||||
)
|
||||
|
||||
// 更新 credit 记录的 referenceId 和 referenceType
|
||||
await supabase
|
||||
.from('credits')
|
||||
.update({
|
||||
await prisma.credit.update({
|
||||
where: { id: creditTransaction.id },
|
||||
data: {
|
||||
referenceId: sessionId,
|
||||
referenceType: 'stripe_payment'
|
||||
})
|
||||
.eq('id', creditTransaction.id)
|
||||
}
|
||||
})
|
||||
|
||||
return NextResponse.json({
|
||||
success: true,
|
||||
|
Loading…
Reference in New Issue
Block a user