batchCooking/apps/api/prisma/migrations
Nicolas 766d48eaa5 feat(recipes): préférences de sources par foyer + distinction officielle/non-officielle
Répond à deux besoins : permettre à chaque foyer de choisir quelles
sources apparaissent dans ses onglets de recettes, et distinguer les
sources à API officielle des sources scrapées.

- RecipeSourceAdapter.official (booléen, sans défaut — chaque
  adaptateur doit le déclarer explicitement) synchronisé sur
  Source.official par syncRecipeSources.
- HouseSource : table de jointure opt-in (House <-> Source) — aucune
  ligne = source masquée. Un foyer nouvellement créé ne voit aucune
  source tant qu'il ne les active pas explicitement.
- GET /reference/sources (catalogue des sources implémentées, avec le
  flag officiel).
- GET/PATCH /house/current/sources (lecture/remplacement complet des
  sources activées par le foyer courant).
- recipe.service.ts : sourceVisibilityWhere() filtre désormais TOUS
  les onglets (perso/foyer/publique/favoris) — une recette sans
  source reste toujours visible ; une recette importée ne l'est que
  si sa source est activée pour le foyer du viewer. Un viewer sans
  foyer ne voit aucune recette sourcée.

Côté web :
- Nouvelle étape /onboarding/sources dans le wizard d'inscription,
  atteinte uniquement si un foyer vient d'être créé/rejoint (sinon on
  saute direct aux allergènes) ; s'auto-saute aussi si aucune source
  n'est encore implémentée (catalogue vide aujourd'hui).
- Nouvelle section « Sources de recettes » dans /parametres/foyer
  (masquée dans les mêmes conditions), avec sauvegarde à la volée
  (même pattern que les autres préférences hot-saved).
- SourceSelect (features/house/), grille de cases à cocher avec badge
  officiel/non-officielle, sur le même principe qu'AllergySelect.

172 tests backend passent (dont 25 nouveaux). Build et lint propres.
Vérifié manuellement en navigateur : le parcours d'onboarding saute
bien l'étape sources (catalogue vide) et affiche « 4 sur 4 » quand un
foyer a été créé ; la section paramètres reste invisible tant
qu'aucune source n'existe.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-20 09:22:54 +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
migration_lock.toml Add specs + Prisma schema for the documented data model (#3) 2026-08-16 12:23:59 +02:00