Files
peakskills/app/api/auth/register/route.ts

71 lines
1.8 KiB
TypeScript

import { NextRequest, NextResponse } from "next/server";
import { userService } from "@/services";
import bcrypt from "bcryptjs";
export async function POST(request: NextRequest) {
try {
const { firstName, lastName, email, password, teamId } =
await request.json();
// Validation des données
if (!firstName || !lastName || !email || !password || !teamId) {
return NextResponse.json(
{ error: "Tous les champs sont requis" },
{ status: 400 }
);
}
// Vérifier si l'email existe déjà
const existingUser = await userService.getUserByEmail(email);
if (existingUser) {
return NextResponse.json(
{ error: "Un utilisateur avec cet email existe déjà" },
{ status: 409 }
);
}
// Hasher le mot de passe
const saltRounds = 12;
const passwordHash = await bcrypt.hash(password, saltRounds);
// Créer l'utilisateur
const newUser = await userService.createUser({
firstName,
lastName,
email,
passwordHash,
teamId,
});
if (!newUser) {
return NextResponse.json(
{ error: "Erreur lors de la création de l'utilisateur" },
{ status: 500 }
);
}
// Retourner les informations de l'utilisateur créé
// Le client devra appeler signIn() pour créer la session
return NextResponse.json(
{
message: "Compte créé avec succès",
user: {
id: newUser.uuid_id,
firstName: newUser.first_name,
lastName: newUser.last_name,
email: newUser.email,
teamId: newUser.team_id,
},
},
{ status: 201 }
);
} catch (error) {
console.error("Register error:", error);
return NextResponse.json(
{ error: "Erreur interne du serveur" },
{ status: 500 }
);
}
}