import { Router, Request, Response } from 'express'; import Order from '../models/Order'; import Customer from '../models/Customer'; const router = Router(); router.get('/', async (req: Request, res: Response) => { try { const { page = 1, limit = 20, status, paymentStatus } = req.query; const filter: any = {}; if (status) filter.status = status; if (paymentStatus) filter.paymentStatus = paymentStatus; const orders = await Order.find(filter) .populate('customerId', 'name email') .sort({ dateOrdered: -1 }) .limit(Number(limit)) .skip((Number(page) - 1) * Number(limit)); const total = await Order.countDocuments(filter); res.json({ orders, total, page: Number(page), limit: Number(limit) }); } catch (err) { res.status(500).json({ message: 'Failed to fetch orders', error: err }); } }); router.post('/', async (req: Request, res: Response) => { try { const order = new Order(req.body); await order.save(); await Customer.findByIdAndUpdate(order.customerId, { $inc: { totalOrders: 1, totalSpent: order.total }, }); res.status(201).json(order); } catch (err) { res.status(400).json({ message: 'Failed to create order', error: err }); } }); router.get('/:id', async (req: Request, res: Response) => { try { const order = await Order.findById(req.params.id).populate('customerId', 'name email'); if (!order) return res.status(404).json({ message: 'Order not found' }); res.json(order); } catch (err) { res.status(500).json({ message: 'Failed to fetch order', error: err }); } }); router.put('/:id', async (req: Request, res: Response) => { try { const order = await Order.findByIdAndUpdate(req.params.id, req.body, { new: true, runValidators: true }); if (!order) return res.status(404).json({ message: 'Order not found' }); res.json(order); } catch (err) { res.status(400).json({ message: 'Failed to update order', error: err }); } }); export default router;