diff --git a/frontend/src/app/(dashboard)/admin/reports/page.tsx b/frontend/src/app/(dashboard)/admin/reports/page.tsx index f4bc57b..a2afd72 100644 --- a/frontend/src/app/(dashboard)/admin/reports/page.tsx +++ b/frontend/src/app/(dashboard)/admin/reports/page.tsx @@ -104,6 +104,7 @@ export default function AdminReportsPage() { Signalé par + Cible Raison Description Statut @@ -114,13 +115,13 @@ export default function AdminReportsPage() { {loading ? ( - + Chargement... ) : reports.length === 0 ? ( - + Aucun signalement trouvé. diff --git a/frontend/src/app/(dashboard)/settings/page.tsx b/frontend/src/app/(dashboard)/settings/page.tsx index b551996..be1025a 100644 --- a/frontend/src/app/(dashboard)/settings/page.tsx +++ b/frontend/src/app/(dashboard)/settings/page.tsx @@ -12,6 +12,7 @@ import { Sun, Trash2, User as UserIcon, + Download, } from "lucide-react"; import { useRouter } from "next/navigation"; import { useTheme } from "next-themes"; @@ -69,6 +70,7 @@ export default function SettingsPage() { const router = useRouter(); const [isSaving, setIsSaving] = React.useState(false); const [isDeleting, setIsDeleting] = React.useState(false); + const [isExporting, setIsExporting] = React.useState(false); const [mounted, setMounted] = React.useState(false); React.useEffect(() => { @@ -144,6 +146,29 @@ export default function SettingsPage() { } }; + const handleExportData = async () => { + setIsExporting(true); + try { + const data = await UserService.exportData(); + const blob = new Blob([JSON.stringify(data, null, 2)], { + type: "application/json", + }); + const url = window.URL.createObjectURL(blob); + const link = document.createElement("a"); + link.href = url; + link.setAttribute("download", `memegoat-data-${user?.username}.json`); + document.body.appendChild(link); + link.click(); + link.remove(); + toast.success("Vos données ont été exportées avec succès."); + } catch (error) { + console.error(error); + toast.error("Erreur lors de l'exportation des données."); + } finally { + setIsExporting(false); + } + }; + return (
@@ -294,6 +319,47 @@ export default function SettingsPage() { + + +
+ + Portabilité des données +
+ + Conformément au RGPD, vous pouvez exporter l'intégralité de vos données rattachées à votre compte. + +
+ +
+
+

Exporter mes données

+

+ Téléchargez un fichier JSON contenant votre profil, vos mèmes et vos favoris. +

+
+ +
+
+
+
diff --git a/frontend/src/services/user.service.ts b/frontend/src/services/user.service.ts index 917e526..29e7fef 100644 --- a/frontend/src/services/user.service.ts +++ b/frontend/src/services/user.service.ts @@ -53,4 +53,9 @@ export const UserService = { }); return data; }, + + async exportData(): Promise { + const { data } = await api.get("/users/me/export"); + return data; + }, };