const express = require('express'); const router = express.Router(); const dbConnector = require('../utils/dbConnector'); // 获取用户收货地址列表 router.get('/', async (req, res) => { try { const userId = req.user.id; const addresses = await dbConnector.query(` SELECT id, recipient, phone, province, city, district, detail, is_default, created_at FROM addresses WHERE user_id = ? ORDER BY is_default DESC, created_at DESC `, [userId]); res.json({ code: 200, message: '获取成功', data: addresses }); } catch (error) { console.error('获取地址列表失败:', error); res.status(500).json({ code: 500, message: '服务器内部错误', error: error.message }); } }); // 添加收货地址 router.post('/', async (req, res) => { try { const { recipient, phone, province, city, district, detail, is_default } = req.body; const userId = req.user.id; // 如果设置为默认地址,先取消其他默认地址 if (is_default) { await dbConnector.query( 'UPDATE addresses SET is_default = 0 WHERE user_id = ?', [userId] ); } const result = await dbConnector.query( `INSERT INTO addresses (user_id, recipient, phone, province, city, district, detail, is_default, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?, ?, NOW(), NOW())`, [userId, recipient, phone, province, city, district, detail, is_default || 0] ); res.status(201).json({ code: 201, message: '添加成功', data: { address_id: result.insertId } }); } catch (error) { console.error('添加地址失败:', error); res.status(500).json({ code: 500, message: '服务器内部错误', error: error.message }); } }); // 更新收货地址 router.put('/:id', async (req, res) => { try { const { id } = req.params; const { recipient, phone, province, city, district, detail, is_default } = req.body; const userId = req.user.id; // 检查地址是否存在 const address = await dbConnector.query( 'SELECT * FROM addresses WHERE id = ? AND user_id = ?', [id, userId] ); if (address.length === 0) { return res.status(404).json({ code: 404, message: '地址不存在' }); } // 如果设置为默认地址,先取消其他默认地址 if (is_default) { await dbConnector.query( 'UPDATE addresses SET is_default = 0 WHERE user_id = ?', [userId] ); } await dbConnector.query( `UPDATE addresses SET recipient = ?, phone = ?, province = ?, city = ?, district = ?, detail = ?, is_default = ?, updated_at = NOW() WHERE id = ? AND user_id = ?`, [recipient, phone, province, city, district, detail, is_default || 0, id, userId] ); res.json({ code: 200, message: '更新成功' }); } catch (error) { console.error('更新地址失败:', error); res.status(500).json({ code: 500, message: '服务器内部错误', error: error.message }); } }); // 删除收货地址 router.delete('/:id', async (req, res) => { try { const { id } = req.params; const userId = req.user.id; await dbConnector.query( 'DELETE FROM addresses WHERE id = ? AND user_id = ?', [id, userId] ); res.json({ code: 200, message: '删除成功' }); } catch (error) { console.error('删除地址失败:', error); res.status(500).json({ code: 500, message: '服务器内部错误', error: error.message }); } }); // 设置默认地址 router.put('/:id/default', async (req, res) => { try { const { id } = req.params; const userId = req.user.id; // 先取消所有默认地址 await dbConnector.query( 'UPDATE addresses SET is_default = 0 WHERE user_id = ?', [userId] ); // 设置当前地址为默认 await dbConnector.query( 'UPDATE addresses SET is_default = 1, updated_at = NOW() WHERE id = ? AND user_id = ?', [id, userId] ); res.json({ code: 200, message: '设置默认地址成功' }); } catch (error) { console.error('设置默认地址失败:', error); res.status(500).json({ code: 500, message: '服务器内部错误', error: error.message }); } }); module.exports = router;