import { Response } from 'express' import pool from '../utils/db' import { AuthRequest } from '../middlewares/auth' import { RowDataPacket, ResultSetHeader } from 'mysql2' // GET /api/user/addresses - 收货地址列表 export async function getAddresses(req: AuthRequest, res: Response): Promise { try { const [rows] = await pool.execute( 'SELECT id, name, phone, province, city, district, detail, is_default FROM addresses WHERE user_id = ? ORDER BY is_default DESC, id DESC', [req.userId] ) res.json({ code: 0, data: rows }) } catch (err) { console.error('getAddresses error:', err) res.status(500).json({ code: 500, message: '获取地址列表失败' }) } } // POST /api/user/addresses - 新增收货地址 export async function createAddress(req: AuthRequest, res: Response): Promise { try { const { name, phone, province, city, district, detail, isDefault } = req.body if (!name || !phone) { res.status(400).json({ code: 400, message: '姓名和手机号不能为空' }) return } const conn = await pool.getConnection() try { await conn.beginTransaction() if (isDefault) { await conn.execute('UPDATE addresses SET is_default = 0 WHERE user_id = ?', [req.userId]) } const [result] = await conn.execute( 'INSERT INTO addresses (user_id, name, phone, province, city, district, detail, is_default) VALUES (?, ?, ?, ?, ?, ?, ?, ?)', [req.userId, name, phone, province || '', city || '', district || '', detail || '', isDefault ? 1 : 0] ) await conn.commit() res.json({ code: 0, data: { id: result.insertId } }) } catch (err) { await conn.rollback() throw err } finally { conn.release() } } catch (err) { console.error('createAddress error:', err) res.status(500).json({ code: 500, message: '新增地址失败' }) } } // PUT /api/user/addresses/:id - 编辑收货地址 export async function updateAddress(req: AuthRequest, res: Response): Promise { try { const { id } = req.params const { name, phone, province, city, district, detail, isDefault } = req.body const conn = await pool.getConnection() try { await conn.beginTransaction() if (isDefault) { await conn.execute('UPDATE addresses SET is_default = 0 WHERE user_id = ?', [req.userId]) } const [result] = await conn.execute( 'UPDATE addresses SET name = ?, phone = ?, province = ?, city = ?, district = ?, detail = ?, is_default = ? WHERE id = ? AND user_id = ?', [name, phone, province || '', city || '', district || '', detail || '', isDefault ? 1 : 0, id, req.userId] ) if (result.affectedRows === 0) { await conn.rollback() res.status(404).json({ code: 404, message: '地址不存在' }) return } await conn.commit() res.json({ code: 0, message: '已更新' }) } catch (err) { await conn.rollback() throw err } finally { conn.release() } } catch (err) { console.error('updateAddress error:', err) res.status(500).json({ code: 500, message: '更新地址失败' }) } } // DELETE /api/user/addresses/:id - 删除收货地址 export async function deleteAddress(req: AuthRequest, res: Response): Promise { try { const { id } = req.params const [result] = await pool.execute( 'DELETE FROM addresses WHERE id = ? AND user_id = ?', [id, req.userId] ) if (result.affectedRows === 0) { res.status(404).json({ code: 404, message: '地址不存在' }) return } res.json({ code: 0, message: '已删除' }) } catch (err) { console.error('deleteAddress error:', err) res.status(500).json({ code: 500, message: '删除地址失败' }) } }