Files
OpticZ/src/app/api/atelier/orders/[id]/route.ts
2026-05-30 14:33:11 +01:00

156 lines
3.6 KiB
TypeScript

import { NextRequest, NextResponse } from 'next/server'
import { db } from '@/lib/db'
import { StatutAtelier } from '@prisma/client'
// POST /api/atelier/orders/[id] - Update workshop status
// Note: Using POST instead of PATCH because the gateway blocks PATCH requests
export async function POST(
request: NextRequest,
{ params }: { params: Promise<{ id: string }> }
) {
try {
const { id } = await params
const body = await request.json()
const { statutAtelier } = body
console.log('API: POST /api/atelier/orders/[id]')
console.log('API: orderId =', id)
console.log('API: statutAtelier =', statutAtelier)
console.log('API: Valid StatutAtelier values:', Object.values(StatutAtelier))
// Validate status
if (!statutAtelier || !Object.values(StatutAtelier).includes(statutAtelier)) {
console.log('API: Invalid status - returning 400')
return NextResponse.json(
{ error: 'Invalid workshop status' },
{ status: 400 }
)
}
// Check if order exists
const existingOrder = await db.vente.findUnique({
where: { id: id }
})
if (!existingOrder) {
return NextResponse.json(
{ error: 'Order not found' },
{ status: 404 }
)
}
// Update order status
const updateData: any = {
statutAtelier: statutAtelier as StatutAtelier,
dateAtelier: new Date()
}
// Add dateRetrait if status is RETIRE
if (statutAtelier === 'RETIRE') {
updateData.dateRetrait = new Date()
}
const updatedOrder = await db.vente.update({
where: { id: id },
data: updateData,
include: {
client: true,
lignes: {
include: {
produit: true
},
where: {
produit: {
categorie: {
in: ['MONTURE', 'VERRE']
}
}
}
},
paiements: true
}
})
console.log('API: Order updated successfully, new status:', updatedOrder.statutAtelier)
// Fetch patients for the client
let patients = []
if (updatedOrder.clientId) {
patients = await db.patient.findMany({
where: {
clientId: updatedOrder.clientId
},
orderBy: {
dateCreation: 'desc'
},
take: 2
})
}
return NextResponse.json({
...updatedOrder,
patients
})
} catch (error) {
console.error('Error updating work order:', error)
return NextResponse.json(
{ error: 'Failed to update work order' },
{ status: 500 }
)
}
}
// GET /api/atelier/orders/[id] - Get specific work order details
export async function GET(
request: NextRequest,
{ params }: { params: Promise<{ id: string }> }
) {
try {
const { id } = await params
const order = await db.vente.findUnique({
where: { id: id },
include: {
client: true,
lignes: {
include: {
produit: true
}
},
paiements: true
}
})
if (!order) {
return NextResponse.json(
{ error: 'Order not found' },
{ status: 404 }
)
}
// Fetch patients for the client
let patients = []
if (order.clientId) {
patients = await db.patient.findMany({
where: {
clientId: order.clientId
},
orderBy: {
dateCreation: 'desc'
},
take: 2
})
}
return NextResponse.json({
...order,
patients
})
} catch (error) {
console.error('Error fetching work order:', error)
return NextResponse.json(
{ error: 'Failed to fetch work order' },
{ status: 500 }
)
}
}