資料庫改為 mySQL
This commit is contained in:
91
app/api/wishes/like/route.ts
Normal file
91
app/api/wishes/like/route.ts
Normal file
@@ -0,0 +1,91 @@
|
||||
import { NextRequest, NextResponse } from 'next/server'
|
||||
import { PrismaClient } from '@prisma/client'
|
||||
|
||||
const prisma = new PrismaClient()
|
||||
|
||||
// 生成固定的用戶會話 ID
|
||||
function getUserSession(request: NextRequest): string {
|
||||
// 從請求頭中獲取用戶會話 ID(由前端設置)
|
||||
const userSession = request.headers.get('x-user-session')
|
||||
|
||||
if (userSession) {
|
||||
return userSession
|
||||
}
|
||||
|
||||
// 如果沒有會話 ID,生成一個新的
|
||||
return `session_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`
|
||||
}
|
||||
|
||||
export async function POST(request: NextRequest) {
|
||||
try {
|
||||
const body = await request.json()
|
||||
const { wishId } = body
|
||||
|
||||
if (!wishId) {
|
||||
return NextResponse.json(
|
||||
{ success: false, error: 'Wish ID is required' },
|
||||
{ status: 400 }
|
||||
)
|
||||
}
|
||||
|
||||
// 獲取用戶會話 ID
|
||||
const userSession = getUserSession(request)
|
||||
|
||||
try {
|
||||
await prisma.wishLike.create({
|
||||
data: {
|
||||
wishId: Number(wishId),
|
||||
userSession: userSession,
|
||||
}
|
||||
})
|
||||
|
||||
return NextResponse.json({ success: true, data: { liked: true } })
|
||||
} catch (error: any) {
|
||||
if (error.code === 'P2002') {
|
||||
// 重複點讚
|
||||
return NextResponse.json({ success: true, data: { liked: false } })
|
||||
}
|
||||
throw error
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('API Error:', error)
|
||||
return NextResponse.json(
|
||||
{ success: false, error: 'Failed to like wish' },
|
||||
{ status: 500 }
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export async function GET(request: NextRequest) {
|
||||
try {
|
||||
const { searchParams } = new URL(request.url)
|
||||
const wishId = searchParams.get('wishId')
|
||||
|
||||
if (!wishId) {
|
||||
return NextResponse.json(
|
||||
{ success: false, error: 'Wish ID is required' },
|
||||
{ status: 400 }
|
||||
)
|
||||
}
|
||||
|
||||
// 獲取用戶會話 ID
|
||||
const userSession = getUserSession(request)
|
||||
|
||||
const like = await prisma.wishLike.findFirst({
|
||||
where: {
|
||||
wishId: Number(wishId),
|
||||
userSession: userSession
|
||||
}
|
||||
})
|
||||
|
||||
const liked = !!like
|
||||
|
||||
return NextResponse.json({ success: true, data: { liked } })
|
||||
} catch (error) {
|
||||
console.error('API Error:', error)
|
||||
return NextResponse.json(
|
||||
{ success: false, error: 'Failed to check like status' },
|
||||
{ status: 500 }
|
||||
)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user