import type { Metadata } from "next"; import { notFound } from "next/navigation"; import { headers } from "next/headers"; import { auth } from "@/lib/auth/server"; import { db, recipes } from "@epicure/db"; import { and, eq } from "@epicure/db"; import { RecipeForm } from "@/components/recipe/recipe-form"; import { getPublicUrl } from "@/lib/storage"; type Params = { params: Promise<{ id: string }> }; export const metadata: Metadata = {}; export default async function EditRecipePage({ params }: Params) { const { id } = await params; const session = await auth.api.getSession({ headers: await headers() }); if (!session) return null; const recipe = await db.query.recipes.findFirst({ where: and(eq(recipes.id, id), eq(recipes.authorId, session.user.id)), with: { ingredients: { orderBy: (t, { asc }) => asc(t.order) }, steps: { orderBy: (t, { asc }) => asc(t.order) }, photos: { orderBy: (t, { asc }) => asc(t.order) }, }, }); if (!recipe) notFound(); const defaultValues = { title: recipe.title, description: recipe.description ?? undefined, baseServings: recipe.baseServings, visibility: recipe.visibility, difficulty: recipe.difficulty, prepMins: recipe.prepMins, cookMins: recipe.cookMins, tags: recipe.tags ?? [], dietaryTags: (recipe.dietaryTags as Record) ?? {}, ingredients: recipe.ingredients.map((ing) => ({ id: ing.id, rawName: ing.rawName, quantity: ing.quantity ?? "", unit: ing.unit ?? "", note: ing.note ?? "", })), steps: recipe.steps.map((step) => ({ id: step.id, instruction: step.instruction, timerSeconds: step.timerSeconds ? String(step.timerSeconds) : "", })), photos: recipe.photos.map((photo) => ({ key: photo.storageKey, isCover: photo.isCover, preview: getPublicUrl(photo.storageKey), })), }; return (

Edit recipe

{recipe.title}

); }