import { notFound } from "next/navigation"; import { headers } from "next/headers"; import { auth } from "@/lib/auth/server"; import { db, recipes, eq, and } from "@epicure/db"; import { CookingMode } from "@/components/cooking-mode/cooking-mode"; import { getMessages, formatMessage } from "@/lib/i18n/server"; type Params = { params: Promise<{ id: string }> }; export async function generateMetadata({ params }: Params) { const { id } = await params; const session = await auth.api.getSession({ headers: await headers() }); const m = getMessages((session?.user as { locale?: string } | undefined)?.locale); const recipe = await db.query.recipes.findFirst({ where: eq(recipes.id, id) }); return { title: recipe ? formatMessage(m.cookingMode.pageTitle, { title: recipe.title }) : m.cookingMode.pageTitleFallback }; } export default async function CookPage({ 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: { steps: { orderBy: (t, { asc }) => asc(t.order) }, ingredients: { orderBy: (t, { asc }) => asc(t.order) }, }, }); if (!recipe || recipe.steps.length === 0) notFound(); const unitPref = (session.user as { unitPref?: string }).unitPref === "imperial" ? "imperial" : "metric"; return ( ({ id: s.id, instruction: s.instruction, timerSeconds: s.timerSeconds, appliesTo: recipe.isBatchCook ? s.appliesTo : undefined, }))} ingredients={recipe.ingredients.map((i) => ({ rawName: i.rawName, quantity: i.quantity, unit: i.unit, }))} /> ); }