- Updated `env.example` to include NextAuth configuration for authentication. - Added `next-auth` dependency to manage user sessions. - Introduced `User` model in Prisma schema with fields for user details and password hashing. - Integrated `AuthProvider` in layout for session management across the app. - Enhanced `Header` component with `AuthButton` for user authentication controls.
60 lines
1.4 KiB
TypeScript
60 lines
1.4 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server'
|
|
import { usersService } from '@/services/users'
|
|
|
|
export async function POST(request: NextRequest) {
|
|
try {
|
|
const { email, name, firstName, lastName, password } = await request.json()
|
|
|
|
// Validation
|
|
if (!email || !password) {
|
|
return NextResponse.json(
|
|
{ error: 'Email et mot de passe requis' },
|
|
{ status: 400 }
|
|
)
|
|
}
|
|
|
|
if (password.length < 6) {
|
|
return NextResponse.json(
|
|
{ error: 'Le mot de passe doit contenir au moins 6 caractères' },
|
|
{ status: 400 }
|
|
)
|
|
}
|
|
|
|
// Vérifier si l'email existe déjà
|
|
const emailExists = await usersService.emailExists(email)
|
|
if (emailExists) {
|
|
return NextResponse.json(
|
|
{ error: 'Un compte avec cet email existe déjà' },
|
|
{ status: 400 }
|
|
)
|
|
}
|
|
|
|
// Créer l'utilisateur
|
|
const user = await usersService.createUser({
|
|
email,
|
|
name,
|
|
firstName,
|
|
lastName,
|
|
password,
|
|
})
|
|
|
|
return NextResponse.json({
|
|
message: 'Compte créé avec succès',
|
|
user: {
|
|
id: user.id,
|
|
email: user.email,
|
|
name: user.name,
|
|
firstName: user.firstName,
|
|
lastName: user.lastName,
|
|
}
|
|
})
|
|
|
|
} catch (error) {
|
|
console.error('Registration error:', error)
|
|
return NextResponse.json(
|
|
{ error: 'Erreur lors de la création du compte' },
|
|
{ status: 500 }
|
|
)
|
|
}
|
|
}
|