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