import { NextResponse } from "next/server"; import { auth } from "@/lib/auth"; import { prisma } from "@/lib/prisma"; export async function GET() { try { const session = await auth(); if (!session?.user) { return NextResponse.json({ error: "Non authentifié" }, { status: 401 }); } const user = await prisma.user.findUnique({ where: { id: session.user.id }, select: { id: true, email: true, username: true, avatar: true, hp: true, maxHp: true, xp: true, maxXp: true, level: true, score: true, createdAt: true, }, }); if (!user) { return NextResponse.json({ error: "Utilisateur non trouvé" }, { status: 404 }); } return NextResponse.json(user); } catch (error) { console.error("Error fetching profile:", error); return NextResponse.json( { error: "Erreur lors de la récupération du profil" }, { status: 500 } ); } } export async function PUT(request: Request) { try { const session = await auth(); if (!session?.user) { return NextResponse.json({ error: "Non authentifié" }, { status: 401 }); } const body = await request.json(); const { username, avatar } = body; // Validation if (username !== undefined) { if (typeof username !== "string" || username.trim().length === 0) { return NextResponse.json( { error: "Le nom d'utilisateur ne peut pas être vide" }, { status: 400 } ); } if (username.length < 3 || username.length > 20) { return NextResponse.json( { error: "Le nom d'utilisateur doit contenir entre 3 et 20 caractères" }, { status: 400 } ); } // Vérifier si le username est déjà pris par un autre utilisateur const existingUser = await prisma.user.findFirst({ where: { username: username.trim(), NOT: { id: session.user.id }, }, }); if (existingUser) { return NextResponse.json( { error: "Ce nom d'utilisateur est déjà pris" }, { status: 400 } ); } } // Mettre à jour l'utilisateur const updateData: { username?: string; avatar?: string | null } = {}; if (username !== undefined) { updateData.username = username.trim(); } if (avatar !== undefined) { updateData.avatar = avatar || null; } const updatedUser = await prisma.user.update({ where: { id: session.user.id }, data: updateData, select: { id: true, email: true, username: true, avatar: true, hp: true, maxHp: true, xp: true, maxXp: true, level: true, score: true, }, }); return NextResponse.json(updatedUser); } catch (error) { console.error("Error updating profile:", error); return NextResponse.json( { error: "Erreur lors de la mise à jour du profil" }, { status: 500 } ); } }