Learn by Directing AI
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