Spaces:
Running
Running
| import { notFound } from "next/navigation"; | |
| import CodeViewer from "@/components/code-viewer"; | |
| import client from "@/lib/prisma"; | |
| import type { Metadata } from "next"; | |
| import { cache } from "react"; | |
| export async function generateMetadata({ | |
| params, | |
| }: { | |
| params: { id: string }; | |
| }): Promise<Metadata> { | |
| const generatedApp = await getGeneratedAppByID(params.id); | |
| let prompt = generatedApp?.prompt; | |
| if (typeof prompt !== "string") { | |
| notFound(); | |
| } | |
| let searchParams = new URLSearchParams(); | |
| searchParams.set("prompt", prompt); | |
| return { | |
| title: "An app generated on LlamaCoder.io", | |
| description: `Prompt: ${generatedApp?.prompt}`, | |
| openGraph: { | |
| images: [`/api/og?${searchParams}`], | |
| }, | |
| }; | |
| } | |
| export default async function Page({ params }: { params: { id: string } }) { | |
| // if process.env.DATABASE_URL is not set, throw an error | |
| if (typeof params.id !== "string") { | |
| notFound(); | |
| } | |
| const generatedApp = await getGeneratedAppByID(params.id); | |
| if (!generatedApp) { | |
| return <div>App not found</div>; | |
| } | |
| return <CodeViewer code={generatedApp.code} />; | |
| } | |
| const getGeneratedAppByID = cache(async (id: string) => { | |
| return client.generatedApp.findUnique({ | |
| where: { | |
| id, | |
| }, | |
| }); | |
| }); | |