Files
kochwas/src/lib/types.ts
hsiegeln a590cf0a57
All checks were successful
Build & Publish Docker Image / build-and-push (push) Successful in 1m16s
feat(domains): Favicons laden und im Filter anzeigen
Für jede Whitelist-Domain wird das Favicon jetzt einmalig geladen und
im image-Verzeichnis abgelegt. SearchFilter zeigt das Icon neben dem
Domain-Namen im Filter-Dropdown.

- Migration 009: allowed_domain.favicon_path (NULL = noch nicht geladen).
- Neues Modul $lib/server/domains/favicons.ts:
  fetchAndStoreFavicon(domain, imageDir) + ensureFavicons(db, imageDir)
  für Bulk-Nachzug; 8 parallele Worker mit 3s-Timeout.
- Reihenfolge: erst /favicon.ico der Domain, Fallback Google-Service.
- GET /api/domains zieht fehlende Favicons auf Abruf nach;
  POST /api/domains lädt direkt im selben Call.
- .ico + .svg jetzt in der /images/[filename]-Route erlaubt.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 08:17:44 +02:00

46 lines
903 B
TypeScript

export type Ingredient = {
position: number;
quantity: number | null;
unit: string | null;
name: string;
note: string | null;
raw_text: string;
};
export type Step = {
position: number;
text: string;
};
export type Recipe = {
id: number | null;
title: string;
description: string | null;
source_url: string | null;
source_domain: string | null;
image_path: string | null;
servings_default: number | null;
servings_unit: string | null;
prep_time_min: number | null;
cook_time_min: number | null;
total_time_min: number | null;
cuisine: string | null;
category: string | null;
ingredients: Ingredient[];
steps: Step[];
tags: string[];
};
export type Profile = {
id: number;
name: string;
avatar_emoji: string | null;
};
export type AllowedDomain = {
id: number;
domain: string;
display_name: string | null;
favicon_path: string | null;
};