67 lines
1.6 KiB
TypeScript
67 lines
1.6 KiB
TypeScript
import { NextRequest, NextResponse } from "next/server";
|
|
import { auth } from "../../../auth";
|
|
import { prisma } from "../../../lib/prisma";
|
|
|
|
// POST /api/games - sauvegarder une partie
|
|
export async function POST(req: NextRequest) {
|
|
const session = await auth();
|
|
if (!session?.user?.id) {
|
|
return NextResponse.json({ error: "Non connecté" }, { status: 401 });
|
|
}
|
|
|
|
const { mode, startArticle, targetArticle, path, clicks, timeSeconds, won } =
|
|
(await req.json()) as {
|
|
mode: string;
|
|
startArticle: string;
|
|
targetArticle: string;
|
|
path: string[];
|
|
clicks: number;
|
|
timeSeconds: number;
|
|
won: boolean;
|
|
};
|
|
|
|
const userExists = await prisma.user.findUnique({
|
|
where: { id: session.user.id },
|
|
select: { id: true },
|
|
});
|
|
if (!userExists) {
|
|
return NextResponse.json({ error: "Utilisateur introuvable" }, { status: 401 });
|
|
}
|
|
|
|
const game = await prisma.game.create({
|
|
data: {
|
|
userId: session.user.id,
|
|
mode,
|
|
startArticle,
|
|
targetArticle,
|
|
path: JSON.stringify(path),
|
|
clicks,
|
|
timeSeconds,
|
|
won,
|
|
},
|
|
});
|
|
|
|
return NextResponse.json({ id: game.id });
|
|
}
|
|
|
|
// GET /api/games - historique de l'utilisateur connecté
|
|
export async function GET() {
|
|
const session = await auth();
|
|
if (!session?.user?.id) {
|
|
return NextResponse.json({ error: "Non connecté" }, { status: 401 });
|
|
}
|
|
|
|
const games = await prisma.game.findMany({
|
|
where: { userId: session.user.id },
|
|
orderBy: { playedAt: "desc" },
|
|
take: 50,
|
|
});
|
|
|
|
return NextResponse.json(
|
|
games.map((g) => ({
|
|
...g,
|
|
path: JSON.parse(g.path) as string[],
|
|
})),
|
|
);
|
|
}
|