import Link from "next/link"; import { prisma } from "@/lib/prisma"; export default async function PromptsPage({ searchParams, }: { searchParams: Promise<{ query?: string; entity?: string; tag?: string; model?: string; sort?: "new" | "popular"; }>; }) { const sp = await searchParams; const query = (sp.query ?? "").trim(); const entity = (sp.entity ?? "").trim(); const tag = (sp.tag ?? "").trim(); const model = (sp.model ?? "").trim(); const sort = sp.sort === "popular" ? "popular" : "new"; const [entities, tags, models, prompts] = await Promise.all([ prisma.entity.findMany({ where: { isPublished: true }, orderBy: { name: "asc" }, take: 100, select: { slug: true, name: true }, }), prisma.tag.findMany({ orderBy: { name: "asc" }, take: 200, select: { slug: true, name: true }, }), prisma.promptModel.findMany({ orderBy: { name: "asc" }, take: 100, select: { slug: true, name: true, provider: true }, }), prisma.prompt.findMany({ where: { isPublished: true, ...(entity ? { entity: { slug: entity } } : {}), ...(model ? { model: { slug: model } } : {}), ...(tag ? { tags: { some: { tag: { slug: tag } } } } : {}), ...(query ? { OR: [ { title: { contains: query, mode: "insensitive" } }, { descriptionMd: { contains: query, mode: "insensitive" } }, ], } : {}), }, orderBy: sort === "popular" ? { likes: { _count: "desc" } } : { createdAt: "desc" }, take: 50, select: { id: true, title: true, descriptionMd: true, createdAt: true, entity: { select: { slug: true, name: true } }, model: { select: { slug: true, name: true, provider: true } }, tags: { select: { tag: { select: { slug: true, name: true } } } }, _count: { select: { likes: true, comments: true, bookmarks: true } }, }, }), ]); return (

모프

프롬프트 검색

대상으로 이동
초기화

결과

{prompts.length}개

{prompts.map((p) => (

{p.title}

{p.entity.name} {p.model ? ` · ${p.model.name}` : ""}

좋아요 {p._count.likes}

댓글 {p._count.comments}

북마크 {p._count.bookmarks}

{p.descriptionMd ? (

{p.descriptionMd}

) : null} {p.tags.length ? (
{p.tags.map((t) => ( #{t.tag.name} ))}
) : null} ))} {!prompts.length ? (
결과가 없습니다. 필터를 줄이거나 키워드를 바꿔보세요.
) : null}

API

검색 API:{" "} /api/prompts

); }