Files
soul-yongping/app/api/user/addresses/route.ts

69 lines
2.5 KiB
TypeScript
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.

/**
* 用户收货地址 - 列表与新建
* GET: 列表(需 userId
* POST: 新建(必填 userId, name, phone, detail省/市/区可选)
*/
import { NextRequest, NextResponse } from 'next/server'
import { query } from '@/lib/db'
import { randomUUID } from 'crypto'
export async function GET(request: NextRequest) {
try {
const userId = request.nextUrl.searchParams.get('userId')
if (!userId) {
return NextResponse.json({ success: false, message: '缺少 userId' }, { status: 400 })
}
const rows = await query(
`SELECT id, user_id, name, phone, province, city, district, detail, is_default, created_at, updated_at
FROM user_addresses WHERE user_id = ? ORDER BY is_default DESC, updated_at DESC`,
[userId]
) as any[]
const list = (rows || []).map((r) => ({
id: r.id,
userId: r.user_id,
name: r.name,
phone: r.phone,
province: r.province,
city: r.city,
district: r.district,
detail: r.detail,
isDefault: !!r.is_default,
fullAddress: `${r.province}${r.city}${r.district}${r.detail}`,
createdAt: r.created_at,
updatedAt: r.updated_at,
}))
return NextResponse.json({ success: true, list })
} catch (e) {
console.error('[Addresses] GET error:', e)
return NextResponse.json({ success: false, message: '获取地址列表失败' }, { status: 500 })
}
}
export async function POST(request: NextRequest) {
try {
const body = await request.json()
const { userId, name, phone, province, city, district, detail, isDefault } = body
if (!userId || !name || !phone || !detail) {
return NextResponse.json(
{ success: false, message: '缺少必填项userId, name, phone, detail' },
{ status: 400 }
)
}
const id = randomUUID().replace(/-/g, '').slice(0, 24)
const p = (v: string | undefined) => (v == null ? '' : String(v).trim())
if (isDefault) {
await query('UPDATE user_addresses SET is_default = 0 WHERE user_id = ?', [userId])
}
await query(
`INSERT INTO user_addresses (id, user_id, name, phone, province, city, district, detail, is_default)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`,
[id, userId, name.trim(), phone.trim(), p(province), p(city), p(district), detail.trim(), isDefault ? 1 : 0]
)
return NextResponse.json({ success: true, id, message: '添加成功' })
} catch (e) {
console.error('[Addresses] POST error:', e)
return NextResponse.json({ success: false, message: '添加地址失败' }, { status: 500 })
}
}