Files
WikiRush/app/api/account/route.ts
T

59 lines
1.7 KiB
TypeScript

import { NextResponse } from "next/server";
import { auth } from "../../../auth";
import { prisma } from "../../../lib/prisma";
export async function GET() {
const session = await auth();
if (!session?.user?.id) {
return NextResponse.json({ error: "Non connecté" }, { status: 401 });
}
const user = await prisma.user.findUnique({
where: { id: session.user.id },
select: { id: true, name: true, email: true, createdAt: true },
});
const games = await prisma.game.findMany({
where: { userId: session.user.id },
select: {
id: true, mode: true, startArticle: true, targetArticle: true,
path: true, clicks: true, timeSeconds: true, won: true, playedAt: true,
},
orderBy: { playedAt: "desc" },
});
const dailyResults = await prisma.dailyResult.findMany({
where: { userId: session.user.id },
select: {
id: true, puzzleId: true, path: true, clicks: true,
timeSeconds: true, won: true, playedAt: true,
},
orderBy: { playedAt: "desc" },
});
const data = {
profile: user,
games: games.map((g) => ({ ...g, path: JSON.parse(g.path) as string[] })),
dailyResults: dailyResults.map((d) => ({ ...d, path: JSON.parse(d.path) as string[] })),
exportedAt: new Date().toISOString(),
};
return new NextResponse(JSON.stringify(data, null, 2), {
headers: {
"Content-Type": "application/json",
"Content-Disposition": `attachment; filename="wikirush-data-${session.user.id}.json"`,
},
});
}
export async function DELETE() {
const session = await auth();
if (!session?.user?.id) {
return NextResponse.json({ error: "Non connecté" }, { status: 401 });
}
await prisma.user.delete({ where: { id: session.user.id } });
return NextResponse.json({ ok: true });
}