SPB Git forge

spb/polyllm

Public
15commits 1branches 0releases
2.2 MBsize
maindefault branch
13 days agolast push
TypeScript 97.4% SQL 1% JavaScript 0.9% CSS 0.6%
1.3 KB · 32 lines typescript
Raw Blame History
1import { withUser, parseBody, json } from "@/lib/api";2import { listPrompts, createPrompt, PROMPT_KINDS, type PromptKind } from "@/lib/prompts/service";3import { promptBodySchema } from "@/lib/prompts/schemas";45export const dynamic = "force-dynamic";67/**8 * GET /api/prompts?q=&kind=&folder=<name|none>&tag=&favorite=1&projectId=<id|none>&limit=9 * → { prompts, folders, tags, total }. `q` matches name, description, content and tags (used by the command palette).10 */11export const GET = withUser(async ({ req, user }) => {12  const p = new URL(req.url).searchParams;13  const kind = p.get("kind");14  return json(15    await listPrompts(user.id, {16      q: p.get("q")?.trim() || undefined,17      kind: kind && (PROMPT_KINDS as readonly string[]).includes(kind) ? (kind as PromptKind) : undefined,18      folder: p.get("folder") ?? undefined,19      tag: p.get("tag") ?? undefined,20      favorite: p.get("favorite") === "1",21      projectId: p.get("projectId") ?? undefined,22      limit: p.get("limit") ? Number(p.get("limit")) : undefined,23    }),24  );25});2627/** POST /api/prompts → 201 { prompt } */28export const POST = withUser(async ({ req, user }) => {29  const body = await parseBody(req, promptBodySchema);30  return json({ prompt: await createPrompt(user.id, body) }, { status: 201 });31});32