e-scooter-rental-system/server/routes/riders.js

85 lines
2.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const express = require('express');
const router = express.Router();
const Rider = require('../models/Rider');
const Order = require('../models/Order');
// 骑手登录
router.post('/login', async (req, res) => {
try {
const { phone, password } = req.body;
if (!phone || !password) {
return res.status(400).json({ success: false, message: '手机号和密码不能为空' });
}
const rider = await Rider.findOne({ phone, password });
if (!rider) {
return res.status(401).json({ success: false, message: '手机号或密码错误' });
}
// 简单生成一个token实际生产应使用 JWT
const token = Buffer.from(`${rider._id}:${Date.now()}`).toString('base64');
res.json({
success: true,
data: {
id: rider._id,
riderId: rider.riderId,
name: rider.name,
phone: rider.phone,
status: rider.status,
rating: rider.rating,
totalOrders: rider.totalOrders,
totalIncome: rider.totalIncome,
token
}
});
} catch (error) {
res.status(500).json({ success: false, message: error.message });
}
});
// 获取骑手信息
router.get('/:id', async (req, res) => {
try {
const rider = await Rider.findById(req.params.id);
if (!rider) {
return res.status(404).json({ success: false, message: '骑手不存在' });
}
res.json({ success: true, data: rider });
} catch (error) {
res.status(500).json({ success: false, message: error.message });
}
});
// 更新骑手信息(如状态切换)
router.put('/:id', async (req, res) => {
try {
const rider = await Rider.findByIdAndUpdate(
req.params.id,
req.body,
{ new: true, runValidators: true }
);
if (!rider) {
return res.status(404).json({ success: false, message: '骑手不存在' });
}
res.json({ success: true, data: rider });
} catch (error) {
res.status(400).json({ success: false, message: error.message });
}
});
// 获取骑手的订单
router.get('/:id/orders', async (req, res) => {
try {
const orders = await Order.find({ rider: req.params.id })
.populate('customer', 'name phone')
.populate('vehicle', 'vehicleId model color')
.sort({ createdAt: -1 });
res.json({ success: true, data: orders });
} catch (error) {
res.status(500).json({ success: false, message: error.message });
}
});
module.exports = router;