diff --git a/src/lib/server/wishlist/repository.ts b/src/lib/server/wishlist/repository.ts index 5520611..cccec3f 100644 --- a/src/lib/server/wishlist/repository.ts +++ b/src/lib/server/wishlist/repository.ts @@ -94,6 +94,13 @@ export function removeFromWishlist( ); } +export function removeFromWishlistForAll( + db: Database.Database, + recipeId: number +): void { + db.prepare('DELETE FROM wishlist WHERE recipe_id = ?').run(recipeId); +} + export function isOnMyWishlist( db: Database.Database, recipeId: number, diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 9a029f9..6a0d2c0 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -102,6 +102,11 @@ navHits = []; navWebHits = []; navOpen = false; + // Badge nach jeder Client-Navigation frisch halten — sonst kann er + // hinter den tatsächlichen Wunschliste-Einträgen herlaufen, wenn + // auf einem anderen Gerät oder in einem anderen Tab etwas geändert + // wurde. + void wishlistStore.refresh(); }); onMount(() => { diff --git a/src/routes/api/wishlist/[recipe_id]/+server.ts b/src/routes/api/wishlist/[recipe_id]/+server.ts index 6939d4a..f4c2fba 100644 --- a/src/routes/api/wishlist/[recipe_id]/+server.ts +++ b/src/routes/api/wishlist/[recipe_id]/+server.ts @@ -1,7 +1,10 @@ import type { RequestHandler } from './$types'; import { json, error } from '@sveltejs/kit'; import { getDb } from '$lib/server/db'; -import { removeFromWishlist } from '$lib/server/wishlist/repository'; +import { + removeFromWishlist, + removeFromWishlistForAll +} from '$lib/server/wishlist/repository'; function parsePositiveInt(raw: string | null, field: string): number { const n = raw === null ? NaN : Number(raw); @@ -9,9 +12,16 @@ function parsePositiveInt(raw: string | null, field: string): number { return n; } +// DELETE /api/wishlist/:id?profile_id=X → entfernt nur den eigenen Wunsch +// DELETE /api/wishlist/:id?all=true → entfernt für ALLE Profile export const DELETE: RequestHandler = async ({ params, url }) => { const id = parsePositiveInt(params.recipe_id!, 'recipe_id'); - const profileId = parsePositiveInt(url.searchParams.get('profile_id'), 'profile_id'); - removeFromWishlist(getDb(), id, profileId); + const db = getDb(); + if (url.searchParams.get('all') === 'true') { + removeFromWishlistForAll(db, id); + } else { + const profileId = parsePositiveInt(url.searchParams.get('profile_id'), 'profile_id'); + removeFromWishlist(db, id, profileId); + } return json({ ok: true }); }; diff --git a/src/routes/wishlist/+page.svelte b/src/routes/wishlist/+page.svelte index b67fe66..1c55750 100644 --- a/src/routes/wishlist/+page.svelte +++ b/src/routes/wishlist/+page.svelte @@ -1,9 +1,9 @@