Files
peakskills/app/api/auth/register/route.ts
2025-08-28 12:07:35 +02:00

76 lines
1.9 KiB
TypeScript

import { NextRequest, NextResponse } from "next/server";
import { AuthService, 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 }
);
}
// Créer la réponse avec le cookie de session
const response = 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 }
);
// Créer la session et définir le cookie
await AuthService.createSession(newUser.uuid_id, response);
return response;
} catch (error) {
console.error("Register error:", error);
return NextResponse.json(
{ error: "Erreur interne du serveur" },
{ status: 500 }
);
}
}