升级商城逻辑

This commit is contained in:
2025-09-02 09:29:20 +08:00
parent 16bfc525c2
commit 49eed40ad0
30 changed files with 22710 additions and 1339 deletions

View File

@@ -100,16 +100,20 @@ const { auth } = require('../middleware/auth');
router.get('/', auth, async (req, res) => {
try {
const userId = req.user.id;
const [addresses] = await getDB().execute(
`SELECT ua.*, al.name as label_name, al.color as label_color
`SELECT ua.*, al.name as label_name, al.color as label_color,
p.name as province_name, c.name as city_name, d.name as district_name
FROM user_addresses ua
LEFT JOIN address_labels al ON ua.label_id = al.id
WHERE ua.user_id = ? AND ua.deleted_at IS NULL
LEFT JOIN address_labels al ON ua.label = al.id
LEFT JOIN china_regions p ON ua.province = p.code
LEFT JOIN china_regions c ON ua.city = c.code
LEFT JOIN china_regions d ON ua.district = d.code
WHERE ua.user_id = ?
ORDER BY ua.is_default DESC, ua.created_at DESC`,
[userId]
);
res.json({
success: true,
data: addresses
@@ -158,7 +162,7 @@ router.get('/:id', auth, async (req, res) => {
try {
const addressId = req.params.id;
const userId = req.user.id;
const [addresses] = await getDB().execute(
`SELECT ua.*, al.name as label_name, al.color as label_color
FROM user_addresses ua
@@ -166,11 +170,11 @@ router.get('/:id', auth, async (req, res) => {
WHERE ua.id = ? AND ua.user_id = ? AND ua.deleted_at IS NULL`,
[addressId, userId]
);
if (addresses.length === 0) {
return res.status(404).json({ message: '收货地址不存在' });
}
res.json({
success: true,
data: addresses[0]
@@ -259,41 +263,36 @@ router.post('/', auth, async (req, res) => {
recipient_name,
phone,
province_code,
province_name,
city_code,
city_name,
district_code,
district_name,
detailed_address,
postal_code,
label_id,
is_default = false
} = req.body;
// 验证必填字段
if (!recipient_name || !phone || !province_code || !city_code || !district_code || !detailed_address) {
return res.status(400).json({ message: '收件人姓名、电话、省市区和详细地址不能为空' });
}
// 如果设置为默认地址,先取消其他默认地址
if (is_default) {
await getDB().execute(
'UPDATE user_addresses SET is_default = false WHERE user_id = ? AND deleted_at IS NULL',
'UPDATE user_addresses SET is_default = false WHERE user_id = ? ',
[userId]
);
}
const [result] = await getDB().execute(
`INSERT INTO user_addresses (
user_id, recipient_name, phone, province_code, province_name, city_code, city_name,
district_code, district_name, detailed_address, postal_code, label_id, is_default, created_at, updated_at
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, NOW(), NOW())`,
user_id, receiver_name, receiver_phone, province, city,
district, detailed_address, is_default, created_at, updated_at
) VALUES (?, ?, ?, ?, ?, ?, ?, ?, NOW(), NOW())`,
[
userId, recipient_name, phone, province_code, province_name, city_code, city_name,
district_code, district_name, detailed_address, postal_code, label_id, is_default
userId, recipient_name, phone, province_code, city_code,
district_code, detailed_address, is_default
]
);
res.status(201).json({
success: true,
message: '收货地址创建成功',
@@ -383,48 +382,45 @@ router.put('/:id', auth, async (req, res) => {
recipient_name,
phone,
province_code,
province_name,
city_code,
city_name,
district_code,
district_name,
detailed_address,
postal_code,
label_id,
is_default
} = req.body;
if (!recipient_name || !phone || !province_code || !city_code || !district_code || !detailed_address) {
return res.status(400).json({ message: '收件人姓名、电话、省市区和详细地址不能为空' });
}
// 检查地址是否存在且属于当前用户
const [existing] = await getDB().execute(
'SELECT id FROM user_addresses WHERE id = ? AND user_id = ? AND deleted_at IS NULL',
'SELECT id FROM user_addresses WHERE id = ? AND user_id = ? ',
[addressId, userId]
);
if (existing.length === 0) {
return res.status(404).json({ message: '收货地址不存在' });
}
// 如果设置为默认地址,先取消其他默认地址
if (is_default) {
await getDB().execute(
'UPDATE user_addresses SET is_default = false WHERE user_id = ? AND id != ? AND deleted_at IS NULL',
'UPDATE user_addresses SET is_default = false WHERE user_id = ? AND id != ? ',
[userId, addressId]
);
}
const [result] = await getDB().execute(
`UPDATE user_addresses SET
recipient_name = ?, phone = ?, province_code = ?, province_name = ?,
city_code = ?, city_name = ?, district_code = ?, district_name = ?,
detailed_address = ?, postal_code = ?, label_id = ?, is_default = ?, updated_at = NOW()
receiver_name = ?, receiver_phone = ?, province = ?, city = ?,
district = ?, detailed_address = ?, is_default = ?, updated_at = NOW()
WHERE id = ? AND user_id = ?`,
[
recipient_name, phone, province_code, province_name, city_code, city_name,
district_code, district_name, detailed_address, postal_code, label_id, is_default,
recipient_name, phone, province_code, city_code,
district_code, detailed_address, is_default,
addressId, userId
]
);
res.json({
success: true,
message: '收货地址更新成功'
@@ -439,7 +435,7 @@ router.put('/:id', auth, async (req, res) => {
* @swagger
* /addresses/{id}:
* delete:
* summary: 删除收货地址(软删除)
* summary: 删除收货地址
* tags: [Addresses]
* security:
* - bearerAuth: []
@@ -475,16 +471,16 @@ router.delete('/:id', auth, async (req, res) => {
try {
const addressId = req.params.id;
const userId = req.user.id;
const [result] = await getDB().execute(
'UPDATE user_addresses SET deleted_at = NOW() WHERE id = ? AND user_id = ? AND deleted_at IS NULL',
'DELETE FROM user_addresses WHERE id = ? AND user_id = ?',
[addressId, userId]
);
if (result.affectedRows === 0) {
return res.status(404).json({ message: '收货地址不存在' });
}
res.json({
success: true,
message: '收货地址删除成功'
@@ -535,29 +531,29 @@ router.put('/:id/default', auth, async (req, res) => {
try {
const addressId = req.params.id;
const userId = req.user.id;
// 检查地址是否存在且属于当前用户
const [existing] = await getDB().execute(
'SELECT id FROM user_addresses WHERE id = ? AND user_id = ? AND deleted_at IS NULL',
[addressId, userId]
);
if (existing.length === 0) {
return res.status(404).json({ message: '收货地址不存在' });
}
// 取消其他默认地址
await getDB().execute(
'UPDATE user_addresses SET is_default = false WHERE user_id = ? AND deleted_at IS NULL',
[userId]
);
// 设置当前地址为默认
await getDB().execute(
'UPDATE user_addresses SET is_default = true WHERE id = ? AND user_id = ?',
[addressId, userId]
);
res.json({
success: true,
message: '默认地址设置成功'