86 lines
2.1 KiB
TypeScript
86 lines
2.1 KiB
TypeScript
import { NextResponse } from "next/server";
|
|
import { prisma } from "@/lib/prisma";
|
|
import bcrypt from "bcryptjs";
|
|
|
|
export async function POST(request: Request) {
|
|
try {
|
|
const body = await request.json();
|
|
const { email, username, password, bio, characterClass, avatar } = body;
|
|
|
|
if (!email || !username || !password) {
|
|
return NextResponse.json(
|
|
{ error: "Email, nom d'utilisateur et mot de passe sont requis" },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
if (password.length < 6) {
|
|
return NextResponse.json(
|
|
{ error: "Le mot de passe doit contenir au moins 6 caractères" },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
// Valider characterClass si fourni
|
|
const validCharacterClasses = [
|
|
"WARRIOR",
|
|
"MAGE",
|
|
"ROGUE",
|
|
"RANGER",
|
|
"PALADIN",
|
|
"ENGINEER",
|
|
"MERCHANT",
|
|
"SCHOLAR",
|
|
"BERSERKER",
|
|
"NECROMANCER",
|
|
];
|
|
if (characterClass && !validCharacterClasses.includes(characterClass)) {
|
|
return NextResponse.json(
|
|
{ error: "Classe de personnage invalide" },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
// Vérifier si l'email existe déjà
|
|
const existingUser = await prisma.user.findFirst({
|
|
where: {
|
|
OR: [{ email }, { username }],
|
|
},
|
|
});
|
|
|
|
if (existingUser) {
|
|
return NextResponse.json(
|
|
{ error: "Cet email ou nom d'utilisateur est déjà utilisé" },
|
|
{ status: 400 }
|
|
);
|
|
}
|
|
|
|
// Hasher le mot de passe
|
|
const hashedPassword = await bcrypt.hash(password, 10);
|
|
|
|
// Créer l'utilisateur
|
|
const user = await prisma.user.create({
|
|
data: {
|
|
email,
|
|
username,
|
|
password: hashedPassword,
|
|
bio: bio || null,
|
|
characterClass: characterClass || null,
|
|
avatar: avatar || null,
|
|
},
|
|
});
|
|
|
|
return NextResponse.json(
|
|
{ message: "Compte créé avec succès", userId: user.id },
|
|
{ status: 201 }
|
|
);
|
|
} catch (error) {
|
|
console.error("Registration error:", error);
|
|
return NextResponse.json(
|
|
{ error: "Une erreur est survenue lors de l'inscription" },
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
}
|
|
|