| const { PrismaClient } = require('@prisma/client'); |
| const prisma = new PrismaClient(); |
|
|
| exports.getAllRequests = async (req, res) => { |
| try { |
| const requests = await prisma.shipment.findMany({ |
| where: { |
| status: { |
| in: ['PENDING', 'AWAITING_DISPATCHER', 'DISPATCHER_APPROVED', 'DRIVER_NOTIFIED', 'IN_TRANSIT'] |
| } |
| } |
| }); |
|
|
| const formattedRequests = requests.map(req => ({ |
| id: `#AR-${req.id.slice(0, 4).toUpperCase()}`, |
| type: req.cargoType || 'General Cargo', |
| route: `${req.pickupLocation || 'Unknown'} → ${req.dropLocation || 'Unknown'}`, |
| weight: req.cargoWeight ? `${req.cargoWeight}T` : 'N/A', |
| priority: req.priority.charAt(0) + req.priority.slice(1).toLowerCase(), |
| status: req.status.split('_').map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()).join(' '), |
| pickup: req.pickupLocation, |
| drop: req.dropLocation, |
| color: req.priority === 'HIGH' ? 'text-red-500 bg-red-500/10 border-red-500/20' : |
| req.priority === 'MEDIUM' ? 'text-orange-500 bg-orange-500/10 border-orange-500/20' : |
| 'text-blue-500 bg-blue-500/10 border-blue-500/20' |
| })); |
|
|
| res.json(formattedRequests); |
| } catch (error) { |
| res.status(500).json({ error: error.message }); |
| } |
| }; |
|
|
| exports.updateRequestStatus = async (req, res) => { |
| try { |
| const { status } = req.body; |
| const request = await prisma.shipment.update({ |
| where: { id: req.params.id }, |
| data: { status } |
| }); |
| res.json(request); |
| } catch (error) { |
| res.status(500).json({ error: error.message }); |
| } |
| }; |
|
|
| exports.getRecommendedDrivers = async (req, res) => { |
| try { |
| const drivers = await prisma.user.findMany({ |
| where: { role: 'DRIVER', status: 'ON_DUTY' }, |
| take: 2, |
| orderBy: { rating: 'desc' } |
| }); |
|
|
| const recommendations = drivers.map((d, index) => ({ |
| id: d.id, |
| name: d.name, |
| initials: d.initials || d.name.split(' ').map(n => n[0]).join(''), |
| plate: d.currentVehicleNo || 'N/A', |
| rating: d.rating, |
| dist: index === 0 ? '12 km' : '18 km', |
| eta: index === 0 ? '22 mins' : '32 mins', |
| profit: index === 0 ? '+₹2,400' : '+₹2,100', |
| bestMatch: index === 0 |
| })); |
|
|
| res.json(recommendations); |
| } catch (error) { |
| res.status(500).json({ error: error.message }); |
| } |
| }; |
|
|