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') } }