103 lines
2.6 KiB
TypeScript
103 lines
2.6 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server'
|
|
import { auth } from '@/auth'
|
|
import { prisma } from '@/lib/prisma'
|
|
|
|
export async function GET(
|
|
request: NextRequest,
|
|
{ params }: { params: Promise<{ id: string }> }
|
|
) {
|
|
try {
|
|
const session = await auth()
|
|
|
|
if (!session?.user?.id) {
|
|
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
|
|
}
|
|
|
|
const { id: orderId } = await params
|
|
|
|
const order = await prisma.order.findFirst({
|
|
where: {
|
|
id: orderId,
|
|
userId: session.user.id
|
|
},
|
|
include: {
|
|
orderItems: {
|
|
include: {
|
|
product: {
|
|
select: {
|
|
name: true,
|
|
images: true,
|
|
discount: true
|
|
}
|
|
}
|
|
}
|
|
},
|
|
user: {
|
|
select: {
|
|
name: true,
|
|
email: true
|
|
}
|
|
},
|
|
shippingAddress: {
|
|
select: {
|
|
firstName: true,
|
|
lastName: true,
|
|
address1: true,
|
|
address2: true,
|
|
city: true,
|
|
state: true,
|
|
zipCode: true,
|
|
phone: true
|
|
}
|
|
}
|
|
}
|
|
})
|
|
|
|
if (!order) {
|
|
return NextResponse.json({ error: 'Order not found' }, { status: 404 })
|
|
}
|
|
|
|
// Calculate estimated delivery (5-7 business days)
|
|
const estimatedDelivery = new Date()
|
|
estimatedDelivery.setDate(estimatedDelivery.getDate() + 7)
|
|
|
|
const response = {
|
|
orderId: order.id,
|
|
total: order.total,
|
|
status: order.status,
|
|
createdAt: order.createdAt,
|
|
estimatedDelivery: estimatedDelivery.toISOString(),
|
|
customer: {
|
|
name: order.user.name || 'Customer',
|
|
email: order.user.email
|
|
},
|
|
shippingAddress: order.shippingAddress ? {
|
|
name: `${order.shippingAddress.firstName} ${order.shippingAddress.lastName}`,
|
|
address: order.shippingAddress.address1,
|
|
address2: order.shippingAddress.address2,
|
|
city: order.shippingAddress.city,
|
|
state: order.shippingAddress.state,
|
|
zipCode: order.shippingAddress.zipCode,
|
|
phone: order.shippingAddress.phone
|
|
} : null,
|
|
items: order.orderItems.map(item => ({
|
|
id: item.id,
|
|
name: item.product.name,
|
|
quantity: item.quantity,
|
|
price: item.price,
|
|
image: item.product.images[0] || null,
|
|
discount: item.product.discount || 0
|
|
}))
|
|
}
|
|
|
|
return NextResponse.json(response)
|
|
} catch (error) {
|
|
console.error('Error fetching order confirmation:', error)
|
|
return NextResponse.json(
|
|
{ error: 'Failed to fetch order details' },
|
|
{ status: 500 }
|
|
)
|
|
}
|
|
}
|
|
|