實作管理者用戶管理、邀請註冊功能

This commit is contained in:
2025-09-09 15:15:26 +08:00
parent 32b19e9a0f
commit 46bd9db2e3
11 changed files with 1297 additions and 214 deletions

View File

@@ -23,42 +23,69 @@ export async function POST(request: NextRequest) {
)
}
// 檢查用戶是否已存在
const existingUser = await userService.findByEmail(email)
if (existingUser) {
return NextResponse.json(
{ error: '該電子郵件已被註冊' },
{ status: 409 }
)
}
// 加密密碼
const saltRounds = 12
const password_hash = await bcrypt.hash(password, saltRounds)
// 創建新用戶
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,
is_active: true
// 檢查是否為邀請用戶(狀態為 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
})
}
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(