batchCooking/apps/api/prisma/migrations
Nicolas b725ec1016 feat(recipes): première source concrète (TheMealDB) + icône de source
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>
2026-08-20 11:16:13 +02:00
..
20260816100611_init Add specs + Prisma schema for the documented data model (#3) 2026-08-16 12:23:59 +02:00
20260816105101_add_user_auth_fields API: signup/login (profile creation + JWT auth) (#4) 2026-08-16 13:45:23 +02:00
20260816230050_unique_diet_category_name API: seed régimes/allergènes + GET /reference/diets, /reference/allergies (step 1/6) 2026-08-16 23:09:02 +02:00
20260816235436_add_category_kind API: séparer allergies et intolérances (kind sur Category) (step 7/8) 2026-08-17 00:01:19 +02:00
20260817093000_add_house_admin_invite_code API: administrateur de foyer, code d'invitation, créer/rejoindre/quitter/supprimer (step 2/8) 2026-08-17 10:38:16 +02:00
20260817120000_add_user_preference Shared + migration: table user_preference (thème clair/sombre/système) (step 1/4) 2026-08-17 15:55:18 +02:00
20260817220730_ingredient_allergies feat(recipes): catalogue v2 - visibilité, favoris, régimes et catalogue d'ingrédients exhaustif 2026-08-18 09:29:11 +02:00
20260818054828_recipe_visibility_favorites_diets_dislikes feat(recipes): catalogue v2 - visibilité, favoris, régimes et catalogue d'ingrédients exhaustif 2026-08-18 09:29:11 +02:00
20260818081109_ingredient_category feat(recipes): catégories d'ingrédients + nouveau sélecteur 2026-08-18 10:24:12 +02:00
20260818104845_ingredient_diet fix(recipes): overflow des préférences + régimes liés aux ingrédients 2026-08-18 11:01:57 +02:00
20260818113250_ingredient_taxonomy_rework fix(migrations): rend la migration ingredient_taxonomy_rework safe sur des données existantes 2026-08-18 12:47:14 +02:00
20260818121549_ingredient_icon_type feat(recipes): remplace les emoji par des icônes SVG épurées 2026-08-18 12:30:25 +02:00
20260818190000_catalog_labels_to_keys chore(web): session de polish global — version, checkbox, danger zone, icônes (#20) 2026-08-18 20:52:12 +02:00
20260818193000_catalog_keys_to_english chore(web): session de polish global — version, checkbox, danger zone, icônes (#20) 2026-08-18 20:52:12 +02:00
20260819064721_planning_item_portions feat(planning): dialog de sélection de recette, création de planning, assignation avec portions 2026-08-19 14:44:02 +02:00
20260819165510_ingredient_reproducible_flag feat(recipes): flag les ingrédients faisables maison + suggestion de recherche 2026-08-19 19:09:39 +02:00
20260819180000_catalog_camel_case_uids refactor(catalog): authoring 100% anglais — uid camelCase, plus de français dans le code 2026-08-19 20:40:55 +02:00
20260819192851_recipe_portions feat(recipes): ajouter le nombre de portions couvertes par une recette 2026-08-19 21:44:01 +02:00
20260819201838_ingredient_unit_catalog feat(recipes): catalogue de référence pour les unités d'ingrédients 2026-08-19 22:34:57 +02:00
20260819210000_tech_step_catalog_key feat(recipes): catalogue de techniques culinaires (tech steps) 2026-08-19 23:29:46 +02:00
20260820100000_recipe_source_linking feat(recipes): relie les recettes à leur source (sourceId + externalId) 2026-08-20 07:43:51 +02:00
20260820110000_step_tech_step_sequence fix(recipes): une étape peut porter une séquence de tech steps 2026-08-20 07:58:29 +02:00
20260820120000_house_source_preferences feat(recipes): préférences de sources par foyer + distinction officielle/non-officielle 2026-08-20 09:22:54 +02:00
20260820130000_source_icon_url feat(recipes): première source concrète (TheMealDB) + icône de source 2026-08-20 11:16:13 +02:00
migration_lock.toml Add specs + Prisma schema for the documented data model (#3) 2026-08-16 12:23:59 +02:00