- 更新 DashboardLayout 组件,统一使用演示模式布局 - 实现仪表盘页面的完整演示数据和功能 - 完成用户管理页面的演示模式,包含搜索、过滤、分页等功能 - 实现通话记录页面的演示数据和录音播放功能 - 完成翻译员管理页面的演示模式 - 实现订单管理页面的完整功能 - 完成发票管理页面的演示数据 - 更新文档管理页面 - 添加 utils.ts 工具函数库 - 完善 API 路由和数据库结构 - 修复各种 TypeScript 类型错误 - 统一界面风格和用户体验
117 lines
3.1 KiB
TypeScript
117 lines
3.1 KiB
TypeScript
import { NextApiRequest, NextApiResponse } from 'next'
|
||
import { auth, db } from '../../../lib/supabase'
|
||
import { handleApiError, validateEmail, validatePassword } from '../../../lib/api-utils'
|
||
|
||
interface RegisterRequest {
|
||
email: string
|
||
password: string
|
||
name: string
|
||
phone?: string
|
||
user_type: 'individual' | 'enterprise'
|
||
enterprise_id?: string
|
||
}
|
||
|
||
export default async function handler(
|
||
req: NextApiRequest,
|
||
res: NextApiResponse
|
||
) {
|
||
if (req.method !== 'POST') {
|
||
return res.status(405).json({ success: false, error: '方法不允许' })
|
||
}
|
||
|
||
try {
|
||
const { email, password, name, phone, user_type, enterprise_id }: RegisterRequest = req.body
|
||
|
||
// 验证必填字段
|
||
if (!email || !password || !name || !user_type) {
|
||
return res.status(400).json({
|
||
success: false,
|
||
error: '缺少必填字段',
|
||
details: '邮箱、密码、姓名和用户类型为必填项'
|
||
})
|
||
}
|
||
|
||
// 验证邮箱格式
|
||
if (!validateEmail(email)) {
|
||
return res.status(400).json({
|
||
success: false,
|
||
error: '邮箱格式不正确'
|
||
})
|
||
}
|
||
|
||
// 验证密码强度
|
||
const passwordValidation = validatePassword(password)
|
||
if (!passwordValidation.valid) {
|
||
return res.status(400).json({
|
||
success: false,
|
||
error: passwordValidation.message
|
||
})
|
||
}
|
||
|
||
// 检查邮箱是否已注册
|
||
try {
|
||
const existingUsers = await db.select('users', '*')
|
||
const existingUser = existingUsers.find((user: any) => user.email === email)
|
||
if (existingUser) {
|
||
return res.status(400).json({
|
||
success: false,
|
||
error: '该邮箱已被注册'
|
||
})
|
||
}
|
||
} catch (error) {
|
||
console.error('Check existing user error:', error)
|
||
// 继续注册流程,让Supabase处理重复邮箱的情况
|
||
}
|
||
|
||
// 注册用户
|
||
const authData = await auth.signUp(email, password, {
|
||
name,
|
||
phone,
|
||
user_type,
|
||
enterprise_id
|
||
})
|
||
|
||
if (!authData?.user) {
|
||
return res.status(400).json({
|
||
success: false,
|
||
error: '注册失败,请稍后重试'
|
||
})
|
||
}
|
||
|
||
// 创建用户记录
|
||
try {
|
||
const userData = {
|
||
id: authData.user.id,
|
||
email,
|
||
name,
|
||
phone: phone || null,
|
||
user_type,
|
||
enterprise_id: enterprise_id || null,
|
||
status: 'active',
|
||
created_at: new Date().toISOString(),
|
||
updated_at: new Date().toISOString()
|
||
}
|
||
|
||
const userRecord = await db.insert('users', userData)
|
||
|
||
return res.status(201).json({
|
||
success: true,
|
||
message: '注册成功',
|
||
data: {
|
||
user: userRecord,
|
||
needEmailVerification: !authData.session // 如果没有session,说明需要邮箱验证
|
||
}
|
||
})
|
||
} catch (dbError) {
|
||
console.error('Create user record error:', dbError)
|
||
return res.status(500).json({
|
||
success: false,
|
||
error: '用户注册成功,但创建用户记录失败',
|
||
details: process.env.NODE_ENV === 'development' ? (dbError as Error).message : undefined
|
||
})
|
||
}
|
||
|
||
} catch (error) {
|
||
return handleApiError(res, error, 'Register')
|
||
}
|
||
}
|