feat(recipes): signaler une technique absente du catalogue (#130) #138
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/missing-tech-steps"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexte
Closes #130(puce 3 de #3). LeTechStepCorrectionPopoverne pouvait proposer qu'une technique déjà dans le catalogue seedé. Cette PR calque le pattern « ingrédient hors-catalogue » (Ingredient.isPlaceholder) surTechStep. Modèle retenu : réutiliserTechStep.isPlaceholder(validé).Changements
Modèle —
TechStep+isPlaceholder/displayName/createdById/createdAt/reviewedAt+ FKcreatedById → user_profiles(SET NULL). Migration20260909140000_tech_step_placeholder: additive, aucune ligne seedée touchée. Mirroir exact de la migrationingredient_placeholder.Contrat —
submitTechStepCorrectionSchemaacceptecorrectedTechStepName(string, 1–80), mutuellement exclusif decorrectedTechStepId; les refines « une technique corrigée est requise » l'acceptent aussi.TechStepViewgagneisPlaceholder: boolean+displayName: string | null.API —
submitTechStepCorrection: sicorrectedTechStepName, crée uneTechStepplaceholder (key: placeholder:<uuid>,createdById) dans la transaction et poursuit avec son id ; la correction s'applique tout de suite (source: "manual"). Nouvel eventtech_step.placeholder_proposed.getTechStepsfiltreisPlaceholder: false.toStepTechStepViews/toCorrectionViewexposent les 2 champs. Ajustements de type :sources.service.ts/cooking-session.service.ts(construction detechStep).Admin —
admin-tech-step-catalog.service.ts+ routesGET/PATCH /admin/api/catalog/tech-step-placeholders(liste plate, pas de regroupement par nom normalisé — les propositions de technique sont bien plus rares que les ingrédients libres).CatalogPage: sélecteur Ingrédients / Techniques en haut, le reste inchangé.Frontend — nouveau helper
steps/tech-step-label.ts(displayName ?? t(catalog.techSteps.<key>)), utilisé parStepDescription(tooltip) et le popover. Le popover a une échappatoire « Ma technique n'est pas dans la liste » : champ texte →correctedTechStepName. i18nrecipes.techStepCorrection.*+admin.catalog.kind.*/techStepEmpty.Vérification locale
pnpm lint✓ ·pnpm build✓ (Prisma régénéré) · Cypress :TechStepCorrectionPopover.cy.tsx11/11 (dont l'échappatoire),admin-catalog.cy.ts4/4 (dont l'onglet Techniques), régressionadmin-corrections/recipes/recipes.feature/recipe-form.feature35/35. Mocha non exécutable ici — nouveaux testsrecipe-tech-step-correction.test.ts(×2),reference.test.ts(×1 + clés mises à jour),admin-catalog.test.ts(×3) ; assertions.techStepexistantes mises à jour pour les 2 champs — à valider en CI.🤖 Generated with Claude Code
Deux specs n'avaient pas été mises à jour quand `sources.service` s'est mis à renvoyer un `techStep` complet et que le titre du catalogue admin est passé de « Ingrédients hors-catalogue » à « Éléments hors-catalogue » : - `sources.test.ts` : les deux `deep.equal({ id, key })` sur le techStep d'une étape de preview attendent maintenant aussi `isPlaceholder: false` et `displayName: null`. - `admin-layout.cy.ts` : l'assertion du `h1` de /admin/catalogue suit le nouveau libellé. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>