import { NextRequest, NextResponse } from 'next/server' import bcrypt from 'bcryptjs' import { v4 as uuidv4 } from 'uuid' import { UserService } from '@/lib/services/database-service' const userService = new UserService() export async function POST(request: NextRequest) { try { const { name, email, password, department, role = 'user' } = await request.json() if (!name || !email || !password || !department) { return NextResponse.json( { error: '請填寫所有必填欄位' }, { status: 400 } ) } if (password.length < 6) { return NextResponse.json( { error: '密碼長度至少需要 6 個字符' }, { status: 400 } ) } // 加密密碼 const saltRounds = 12 const password_hash = await bcrypt.hash(password, saltRounds) // 檢查是否為邀請用戶(狀態為 invited) const invitedUser = await userService.findInvitedUserByEmail(email) if (invitedUser) { // 更新邀請用戶為正式用戶 const updatedUser = await userService.completeInvitedUserRegistration( invitedUser.id, name, department, password_hash, role ) if (updatedUser.success) { const { password_hash: _, ...userWithoutPassword } = updatedUser.user return NextResponse.json({ success: true, user: userWithoutPassword }) } else { return NextResponse.json( { error: updatedUser.error || '完成註冊失敗' }, { status: 400 } ) } } else { // 檢查用戶是否已存在(活躍用戶) const existingUser = await userService.findByEmail(email) if (existingUser) { return NextResponse.json( { error: '該電子郵件已被註冊' }, { status: 409 } ) } // 創建新用戶 const newUser = { id: uuidv4(), name, email, password_hash, department, role: role as 'user' | 'developer' | 'admin', join_date: new Date().toISOString().split('T')[0], total_likes: 0, total_views: 0, status: 'active' as 'active' | 'inactive' | 'invited' } const createdUser = await userService.create(newUser) // 返回用戶信息(不包含密碼) const { password_hash: _, ...userWithoutPassword } = createdUser return NextResponse.json({ success: true, user: userWithoutPassword }) } } catch (error) { console.error('註冊錯誤:', error) return NextResponse.json( { error: '註冊過程中發生錯誤' }, { status: 500 } ) } }