All materials
shipments.ts
tsshipments.ts
import { Router, Request, Response } from 'express'
import { prisma } from '../lib/db'
import { requireAuth } from '../lib/auth'
const router = Router()
router.get('/', requireAuth, async (_req: Request, res: Response) => {
try {
const shipments = await prisma.shipment.findMany({
include: {
items: { include: { batch: { select: { variete: true, poids_brut: true } } } },
certificates: true,
},
orderBy: { created_at: 'desc' },
})
res.json(shipments)
} catch (error) {
res.status(500).json({ error: 'Failed to fetch shipments' })
}
})
router.post('/', requireAuth, async (req: Request, res: Response) => {
try {
const { destination, vessel_name, departure_date, container_id } = req.body
const shipment = await prisma.shipment.create({
data: {
destination,
vessel_name,
departure_date: departure_date ? new Date(departure_date) : null,
container_id,
},
})
res.status(201).json(shipment)
} catch (error) {
res.status(500).json({ error: 'Failed to create shipment' })
}
})
router.patch('/:id', requireAuth, async (req: Request, res: Response) => {
try {
const { status, vessel_name, departure_date, container_id } = req.body
const shipment = await prisma.shipment.update({
where: { id: parseInt(req.params.id) },
data: { status, vessel_name, departure_date: departure_date ? new Date(departure_date) : undefined, container_id },
})
res.json(shipment)
} catch (error) {
res.status(500).json({ error: 'Failed to update shipment' })
}
})
export default router