升级商城逻辑
This commit is contained in:
@@ -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: '默认地址设置成功'
|
||||
|
||||
Reference in New Issue
Block a user