import { NextRequest, NextResponse } from 'next/server' import { prisma } from '@/lib/prisma' import { verifyToken } from '@/lib/auth' // 获取购物车 export async function GET(request: NextRequest) { try { 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 cartItems = await prisma.cartItem.findMany({ where: { userId: decoded.userId }, include: { component: { include: { componentType: true } } }, orderBy: { createdAt: 'desc' } }) return NextResponse.json(cartItems) } catch (error) { console.error('获取购物车失败:', error) return NextResponse.json( { message: '获取购物车失败' }, { status: 500 } ) } } // 添加商品到购物车 export async function POST(request: NextRequest) { try { 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 { componentId, quantity = 1 } = await request.json() if (!componentId) { return NextResponse.json( { message: '缺少商品ID' }, { status: 400 } ) } // 检查商品是否存在 const component = await prisma.component.findUnique({ where: { id: componentId } }) if (!component) { return NextResponse.json( { message: '商品不存在' }, { status: 404 } ) } if (component.stock < quantity) { return NextResponse.json( { message: '库存不足' }, { status: 400 } ) } // 检查购物车中是否已存在该商品 const existingCartItem = await prisma.cartItem.findUnique({ where: { userId_componentId: { userId: decoded.userId, componentId: componentId } } }) let cartItem if (existingCartItem) { // 更新数量 const newQuantity = existingCartItem.quantity + quantity if (newQuantity > component.stock) { return NextResponse.json( { message: '超出库存限制' }, { status: 400 } ) } cartItem = await prisma.cartItem.update({ where: { id: existingCartItem.id }, data: { quantity: newQuantity }, include: { component: { include: { componentType: true } } } }) } else { // 创建新的购物车项 cartItem = await prisma.cartItem.create({ data: { userId: decoded.userId, componentId: componentId, quantity: quantity }, include: { component: { include: { componentType: true } } } }) } return NextResponse.json(cartItem, { status: 201 }) } catch (error) { console.error('添加到购物车失败:', error) return NextResponse.json( { message: '添加到购物车失败' }, { status: 500 } ) } } // 清空购物车 export async function DELETE(request: NextRequest) { try { 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 } ) } await prisma.cartItem.deleteMany({ where: { userId: decoded.userId } }) return NextResponse.json({ message: '购物车已清空' }) } catch (error) { console.error('清空购物车失败:', error) return NextResponse.json( { message: '清空购物车失败' }, { status: 500 } ) } }