From e516ed9efd71f6b7d5a01be87b43e4c34c9d7aea Mon Sep 17 00:00:00 2001 From: Julien Froidefond Date: Thu, 27 Nov 2025 10:31:24 +0100 Subject: [PATCH] feat: add functionality to clear category assignments from transactions and display categorized count in settings --- .../transactions/clear-categories/route.ts | 24 +++++++++ app/settings/page.tsx | 51 +++++++++++++++++-- 2 files changed, 72 insertions(+), 3 deletions(-) create mode 100644 app/api/banking/transactions/clear-categories/route.ts diff --git a/app/api/banking/transactions/clear-categories/route.ts b/app/api/banking/transactions/clear-categories/route.ts new file mode 100644 index 0000000..3f20a10 --- /dev/null +++ b/app/api/banking/transactions/clear-categories/route.ts @@ -0,0 +1,24 @@ +import { NextResponse } from "next/server" +import { prisma } from "@/lib/prisma" + +export async function POST() { + try { + const result = await prisma.transaction.updateMany({ + where: { + categoryId: { not: null }, + }, + data: { + categoryId: null, + }, + }) + + return NextResponse.json({ + success: true, + count: result.count, + }) + } catch (error) { + console.error("Error clearing categories:", error) + return NextResponse.json({ error: "Failed to clear categories" }, { status: 500 }) + } +} + diff --git a/app/settings/page.tsx b/app/settings/page.tsx index 48ba1ad..d4b7ab6 100644 --- a/app/settings/page.tsx +++ b/app/settings/page.tsx @@ -16,7 +16,7 @@ import { AlertDialogTitle, AlertDialogTrigger, } from "@/components/ui/alert-dialog" -import { Download, Trash2, Upload, RefreshCw, Database, FileJson } from "lucide-react" +import { Download, Trash2, Upload, RefreshCw, Database, FileJson, Tags } from "lucide-react" import type { BankingData } from "@/lib/types" export default function SettingsPage() { @@ -82,6 +82,22 @@ export default function SettingsPage() { window.location.reload() } + const clearAllCategories = async () => { + try { + const response = await fetch("/api/banking/transactions/clear-categories", { + method: "POST", + }) + if (!response.ok) throw new Error("Erreur") + refresh() + alert("Catégories supprimées de toutes les opérations") + } catch (error) { + console.error(error) + alert("Erreur lors de la suppression des catégories") + } + } + + const categorizedCount = data.transactions.filter((t) => t.categoryId).length + return (
@@ -132,10 +148,39 @@ export default function SettingsPage() { Actions irréversibles - procédez avec prudence - + + {/* Supprimer catégories des opérations */} - + + + + Supprimer toutes les catégories ? + + Cette action va retirer la catégorie de {categorizedCount} opération{categorizedCount > 1 ? "s" : ""}. + Les catégories elles-mêmes ne seront pas supprimées, seulement leur affectation aux opérations. + + + + Annuler + + Supprimer les affectations + + + + + + {/* Réinitialiser toutes les données */} + + +