- Enable MongoDB connection in server - Add Customer and Expense models - Implement full CRUD for products, orders, customers, expenses - Implement analytics dashboard with revenue, sales chart, top products/customers - Add MongoDB service to docker-compose.deploy.yml with persistent volume Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
62 lines
2 KiB
TypeScript
62 lines
2 KiB
TypeScript
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;
|