Marmiton s'est avéré inaccessible pour du scraping (bloqué même via WebFetch, signe de protection anti-bot) — TheMealDB (themealdb.com) est une vraie API JSON publique et gratuite, sans scraping, testée en conditions réelles (list → fetchDetail → parse fonctionnent bout en bout contre l'API live). - Source.iconUrl (nullable) + RecipeSourceAdapter.iconUrl (requis, même convention que `official`) synchronisé par syncRecipeSources. - apps/api/src/sources/the-meal-db.ts : premier RecipeSourceAdapter réel — official: true (API officielle, pas de scraping), utilise fetch natif (aucune dépendance ajoutée). list() fait une recherche (pas de vrai "browse" côté TheMealDB, mais une requête vide renvoie un échantillon de secours) ; parse() éclate les instructions en étapes par ligne et ignore les emplacements d'ingrédients vides. - apps/api/src/sources/index.ts : registerAllRecipeSources(), appelé par server.ts (process réel) et prisma/seed.ts — délibérément PAS importé par app.ts, pour ne jamais dépendre de l'ordre des tests. - SourceSelect (web) affiche désormais le logo de la source à côté de son nom. Vérifié en conditions réelles : seed → table sources peuplée avec le vrai logo TheMealDB ; endpoint /reference/sources sur serveur réel ; parcours navigateur complet (onboarding → étape sources visible avec icône chargée → activation → paramètres foyer reflète le choix). 186 tests passent (16 nouveaux, dont le moteur TheMealDB testé avec un stub de fetch — aucun appel réseau réel dans la suite automatisée). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
22 lines
963 B
TypeScript
22 lines
963 B
TypeScript
import { PrismaClient } from "@prisma/client";
|
|
import { syncRecipeSources } from "../src/db/recipe-source-sync.js";
|
|
import { seedReferenceData } from "../src/db/reference-seed-data.js";
|
|
import { registerAllRecipeSources } from "../src/sources/index.js";
|
|
|
|
// Standalone CLI entry point (not `src/db/prisma.ts` — that module pulls in
|
|
// the rest of the app's config/env plumbing this doesn't need), run via
|
|
// `prisma db seed` (see the `prisma.seed` entry in package.json) — either
|
|
// directly (`pnpm --filter api prisma:seed`) or automatically after
|
|
// `prisma migrate reset`. The actual data/logic lives in
|
|
// `src/db/reference-seed-data.ts`, shared with `test-support/reset-db.ts`.
|
|
const prisma = new PrismaClient();
|
|
registerAllRecipeSources();
|
|
|
|
seedReferenceData(prisma)
|
|
.then(() => syncRecipeSources(prisma))
|
|
.then(() => prisma.$disconnect())
|
|
.catch(async (err) => {
|
|
console.error(err);
|
|
await prisma.$disconnect();
|
|
process.exit(1);
|
|
});
|