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 } ); } // Générer un token de session const sessionToken = await AuthService.createSession(newUser.uuid_id); // 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 } ); // Définir le cookie de session response.cookies.set("session_token", sessionToken, { httpOnly: true, secure: process.env.NODE_ENV === "production", sameSite: "lax", maxAge: 60 * 60 * 24 * 7, // 7 jours path: "/", }); return response; } catch (error) { console.error("Register error:", error); return NextResponse.json( { error: "Erreur interne du serveur" }, { status: 500 } ); } }