diff --git a/src/routes/api/tasks/stats/+server.ts b/src/routes/api/tasks/stats/+server.ts index 3b14a2c..500da47 100644 --- a/src/routes/api/tasks/stats/+server.ts +++ b/src/routes/api/tasks/stats/+server.ts @@ -30,3 +30,14 @@ export const GET: RequestHandler = async ({ locals }) => { return json({ userStats, userStickers, recentCompletions }); }; + +export const DELETE: RequestHandler = async ({ locals }) => { + const auth = await locals.auth(); + if (!auth?.user?.nickname) throw error(401, 'Not logged in'); + + await dbConnect(); + + const { deletedCount } = await TaskCompletion.deleteMany({ completedBy: auth.user.nickname }); + + return json({ deletedCount }); +}; diff --git a/src/routes/tasks/rewards/+page.svelte b/src/routes/tasks/rewards/+page.svelte index 05e17a5..4d1e52c 100644 --- a/src/routes/tasks/rewards/+page.svelte +++ b/src/routes/tasks/rewards/+page.svelte @@ -4,6 +4,7 @@ import { de } from 'date-fns/locale'; import { scale } from 'svelte/transition'; import { flip } from 'svelte/animate'; + import { Trash2 } from 'lucide-svelte'; import StickerCalendar from '$lib/components/tasks/StickerCalendar.svelte'; let { data } = $props(); @@ -60,6 +61,15 @@ .filter((/** @type {any} */ c) => !currentUser || c.completedBy === currentUser) .slice(0, 20) ); + + async function clearHistory() { + if (!confirm('Deinen gesamten Verlauf und alle Sticker wirklich löschen? Das kann nicht rückgängig gemacht werden.')) return; + const res = await fetch('/api/tasks/stats', { method: 'DELETE' }); + if (res.ok) { + const [statsRes] = await Promise.all([fetch('/api/tasks/stats')]); + if (statsRes.ok) stats = await statsRes.json(); + } + }