-- Shared family wishlist: recipes someone wants to cook next. -- Each recipe appears at most once; anyone can add/remove and like/unlike. CREATE TABLE IF NOT EXISTS wishlist ( recipe_id INTEGER PRIMARY KEY REFERENCES recipe(id) ON DELETE CASCADE, added_by_profile_id INTEGER REFERENCES profile(id) ON DELETE SET NULL, added_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ); CREATE INDEX IF NOT EXISTS ix_wishlist_added_at ON wishlist(added_at DESC); CREATE TABLE IF NOT EXISTS wishlist_like ( recipe_id INTEGER NOT NULL REFERENCES recipe(id) ON DELETE CASCADE, profile_id INTEGER NOT NULL REFERENCES profile(id) ON DELETE CASCADE, created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (recipe_id, profile_id) ); CREATE INDEX IF NOT EXISTS ix_wishlist_like_recipe ON wishlist_like(recipe_id);