2025-06-22 11:34:32 +08:00

140 lines
3.2 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server'
import { prisma } from '@/lib/prisma'
import { verifyToken } from '@/lib/auth'
// 更新购物车项数量
export async function PUT(
request: NextRequest,
{ params }: { params: Promise<{ id: string }> }
) {
try {
const { id } = await params
const authHeader = request.headers.get('authorization')
if (!authHeader || !authHeader.startsWith('Bearer ')) {
return NextResponse.json(
{ message: '请先登录' },
{ status: 401 }
)
}
const token = authHeader.substring(7)
const decoded = verifyToken(token)
if (!decoded) {
return NextResponse.json(
{ message: '登录已过期' },
{ status: 401 }
)
}
const { quantity } = await request.json()
if (!quantity || quantity < 1) {
return NextResponse.json(
{ message: '数量必须大于0' },
{ status: 400 }
)
}
// 检查购物车项是否属于当前用户
const cartItem = await prisma.cartItem.findFirst({
where: {
id: id,
userId: decoded.userId
},
include: {
component: true
}
})
if (!cartItem) {
return NextResponse.json(
{ message: '购物车项不存在' },
{ status: 404 }
)
}
// 检查库存
if (quantity > cartItem.component.stock) {
return NextResponse.json(
{ message: '库存不足' },
{ status: 400 }
)
}
const updatedCartItem = await prisma.cartItem.update({
where: { id: id },
data: { quantity: quantity },
include: {
component: {
include: {
componentType: true
}
}
}
})
return NextResponse.json(updatedCartItem)
} catch (error) {
console.error('更新购物车项失败:', error)
return NextResponse.json(
{ message: '更新购物车项失败' },
{ status: 500 }
)
}
}
// 删除购物车项
export async function DELETE(
request: NextRequest,
{ params }: { params: Promise<{ id: string }> }
) {
try {
const { id } = await params
const authHeader = request.headers.get('authorization')
if (!authHeader || !authHeader.startsWith('Bearer ')) {
return NextResponse.json(
{ message: '请先登录' },
{ status: 401 }
)
}
const token = authHeader.substring(7)
const decoded = verifyToken(token)
if (!decoded) {
return NextResponse.json(
{ message: '登录已过期' },
{ status: 401 }
)
}
// 检查购物车项是否属于当前用户
const cartItem = await prisma.cartItem.findFirst({
where: {
id: id,
userId: decoded.userId
}
})
if (!cartItem) {
return NextResponse.json(
{ message: '购物车项不存在' },
{ status: 404 }
)
}
await prisma.cartItem.delete({
where: { id: id }
})
return NextResponse.json({ message: '已从购物车移除' })
} catch (error) {
console.error('删除购物车项失败:', error)
return NextResponse.json(
{ message: '删除购物车项失败' },
{ status: 500 }
)
}
}