From 76c7967a9accb8746edd9d47d5620b7d46072da1 Mon Sep 17 00:00:00 2001 From: jessy-david-dev Date: Fri, 10 Apr 2026 23:09:36 +0200 Subject: [PATCH] feat: add RGPD data export and legal notices page --- app/api/account/route.ts | 44 +++++++++ app/components/ProfileScreen.tsx | 20 ++++ app/layout.tsx | 4 + app/mentions-legales/page.tsx | 161 +++++++++++++++++++++++++++++++ 4 files changed, 229 insertions(+) create mode 100644 app/mentions-legales/page.tsx 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).

+
+ + + + + + + Télécharger (.json) + +
+ {/* Danger zone */}

Zone dangereuse

diff --git a/app/layout.tsx b/app/layout.tsx index eadc7ea..e3c0653 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -52,6 +52,10 @@ export default function RootLayout({ Politique de confidentialité · + + Mentions légales + + · À propos diff --git a/app/mentions-legales/page.tsx b/app/mentions-legales/page.tsx new file mode 100644 index 0000000..503b40a --- /dev/null +++ b/app/mentions-legales/page.tsx @@ -0,0 +1,161 @@ +import type { Metadata } from "next"; +import Link from "next/link"; + +export const metadata: Metadata = { + title: "Mentions légales - WikiRush", + description: "Mentions légales du site WikiRush.", +}; + +export default function MentionsLegalesPage() { + return ( +
+
+ + + Retour + + +
+

Mentions légales

+

+ Conformément à la loi n° 2004-575 du 21 juin 2004 pour la confiance + dans l'économie numérique. +

+
+ +
+ {/* Éditeur */} +
+

+ Éditeur du site +

+
+

+ + Responsable de publication : + {" "} + DAVID Jessy +

+

+ Contact :{" "} + + contact@jessy-david.dev + +

+
+
+ + {/* Hébergeur */} +
+

+ Hébergeur +

+
+

+ Raison sociale :{" "} + QuantumCraft Studios +

+

+ SIRET : 932 107 758 00017 +

+

+ Adresse : 58 Rue de + Monceau, 75008 Paris, France +

+

+ Site web :{" "} + + quantumcraft-studios.com + +

+
+
+ + {/* Propriété intellectuelle */} +
+

+ Propriété intellectuelle +

+
+

+ 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 + + . +

+
+
+ + {/* Données personnelles */} +
+

+ Données personnelles +

+
+

+ 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é + + . +

+
+
+
+
+
+ ); +}