Files
kochwas/src/routes/api/wishlist/count/+server.ts

9 lines
308 B
TypeScript
Raw Normal View History

feat(wishlist): per-user Wünsche + Header-Badge mit Gesamtzahl Schema-Änderung (Migration 005): - Tabelle wishlist umgestellt auf PK (recipe_id, profile_id) - wishlist_like-Tabelle zusammengelegt — Liken WAR schon "will ich auch", also werden alle bestehenden Likes Memberships auf der neuen Tabelle. - Alt-Einträge mit added_by_profile_id werden migriert, anonyme gehen verloren (war inkonsistent, jetzt erzwingen wir profile_id NOT NULL). Repository: - listWishlist aggregiert pro Rezept: wanted_by_count, wanted_by_names (kommagetrennt), on_my_wishlist für das aktive Profil - listWishlistProfileIds(recipeId) für den Recipe-Page-Loader - countWishlistRecipes für das Header-Badge (DISTINCT recipe_id) - addToWishlist/removeFromWishlist/isOnMyWishlist alle mit profile_id als Pflicht API: - POST /api/wishlist: profile_id jetzt Pflicht (nullable raus) - DELETE /api/wishlist/[recipe_id]?profile_id=X (nur eigenes Entry) - /api/wishlist/[recipe_id]/like komplett entfernt (Konzept obsolet) - Neu: GET /api/wishlist/count → { count: <distinct recipes> } UI: - Header-Heart bekommt rotes Badge mit Zahl der Wunschliste-Rezepte. wishlistStore in $lib/client/wishlist.svelte.ts hält den Count reaktiv; Refresh auf Mount, nach Add/Remove, beim Öffnen der Wunschliste. - Recipe-Detail: Loader liefert wishlist_profile_ids; onMyWishlist ist ein $derived. Toggle fragt aktives Profil (alertAction sonst), mutiert die lokale Liste + ruft wishlistStore.refresh. - Wunschliste-Seite: Heart toggelt eigenen Wunsch, Count zeigt Gesamt- wünsche, kommagetrennte Namen zeigen "wer will". Trash-Button entfernt — Heart-off reicht jetzt. Tests (99 → 99, 8 neu geschrieben): - Per-User-Add/Remove, aggregierte Counts, on_my_wishlist, Cascades bei Recipe/Profile-Delete, countWishlistRecipes = DISTINCT.
2026-04-17 19:16:19 +02:00
import type { RequestHandler } from './$types';
import { json } from '@sveltejs/kit';
import { getDb } from '$lib/server/db';
import { countWishlistRecipes } from '$lib/server/wishlist/repository';
export const GET: RequestHandler = async () => {
return json({ count: countWishlistRecipes(getDb()) });
};