feat: manual nutrition entry on recipe editor
Lets authors enter nutrition values by hand instead of relying only on the AI estimate; the detail-page panel now shows whether data was manually entered or AI-estimated and offers to switch between them. v0.35.0
This commit is contained in:
@@ -56,6 +56,16 @@ const UpdateRecipeSchema = z.object({
|
||||
freezerNote: z.string().max(300).optional(),
|
||||
dayOfInstructions: z.string().min(1).max(1000),
|
||||
})).max(10).optional(),
|
||||
// Manually-entered per-serving nutrition — set to null to clear it and
|
||||
// re-enable the AI-estimate action on the recipe page.
|
||||
nutrition: z.object({
|
||||
calories: z.number().min(0).max(10000),
|
||||
proteinG: z.number().min(0).max(1000),
|
||||
carbsG: z.number().min(0).max(1000),
|
||||
fatG: z.number().min(0).max(1000),
|
||||
fiberG: z.number().min(0).max(1000),
|
||||
sodiumMg: z.number().min(0).max(100000),
|
||||
}).nullable().optional(),
|
||||
});
|
||||
|
||||
type Params = { params: Promise<{ id: string }> };
|
||||
@@ -159,6 +169,10 @@ export async function PUT(req: NextRequest, { params }: Params) {
|
||||
if (data.tags !== undefined) updates.tags = data.tags;
|
||||
if (data.dietaryTags !== undefined) updates.dietaryTags = data.dietaryTags;
|
||||
if (data.isBatchCook !== undefined) updates.isBatchCook = data.isBatchCook;
|
||||
if (data.nutrition !== undefined) {
|
||||
updates.nutritionData = data.nutrition ? { perServing: data.nutrition } : null;
|
||||
updates.nutritionManual = !!data.nutrition;
|
||||
}
|
||||
|
||||
await tx.update(recipes).set(updates).where(eq(recipes.id, id));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user