diff --git a/app/api/account/route.ts b/app/api/account/route.ts index 1466111..9669289 100644 --- a/app/api/account/route.ts +++ b/app/api/account/route.ts @@ -2,6 +2,50 @@ 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) { diff --git a/app/components/ProfileScreen.tsx b/app/components/ProfileScreen.tsx index 7cde178..e48dae2 100644 --- a/app/components/ProfileScreen.tsx +++ b/app/components/ProfileScreen.tsx @@ -170,6 +170,26 @@ export function ProfileScreen({ userName, onBack }: { userName: string; onBack: ))} + {/* Mes données */} +
Mes données
+Télécharge toutes tes données personnelles (RGPD).
++ Conformément à la loi n° 2004-575 du 21 juin 2004 pour la confiance + dans l'économie numérique. +
++ + Responsable de publication : + {" "} + DAVID Jessy +
++ Contact :{" "} + + contact@jessy-david.dev + +
++ Raison sociale :{" "} + QuantumCraft Studios +
++ SIRET : 932 107 758 00017 +
++ Adresse : 58 Rue de + Monceau, 75008 Paris, France +
++ Site web :{" "} + + quantumcraft-studios.com + +
++ L'ensemble du contenu de ce site (structure, textes, logos, + visuels) est la propriété de DAVID Jessy, sauf mentions + contraires. Toute reproduction, représentation ou diffusion, en + tout ou partie, est interdite sans autorisation préalable. +
++ Les articles consultés durant les parties proviennent de{" "} + + Wikipédia + {" "} + et sont soumis à la licence{" "} + + CC BY-SA 4.0 + + . +
++ Les données collectées (pseudo, email, historique de parties) + sont utilisées uniquement pour le fonctionnement du service. + Elles ne sont pas transmises à des tiers. Conformément au RGPD, + vous disposez d'un droit d'accès, de rectification et + de suppression de vos données. +
++ Pour exercer ces droits :{" "} + + contact@jessy-david.dev + +
++ Consulter notre{" "} + + politique de confidentialité + + . +
+