{"path":"src/app/api/products/route.ts","size":1428,"locked":false,"binary":false,"truncated":false,"content":"import { createClient } from \"@/lib/supabase/server\";\nimport { NextResponse } from \"next/server\";\n\nexport const dynamic = \"force-dynamic\";\nconst ITEMS_PER_PAGE = 5;\n\nexport async function GET(request: Request) {\n  const { searchParams } = new URL(request.url);\n  const search = searchParams.get(\"search\") || \"\";\n  const page = parseInt(searchParams.get(\"page\") || \"1\", 10) || 1;\n\n  // Return empty if Supabase is not configured\n  if (\n    !process.env.NEXT_PUBLIC_SUPABASE_URL ||\n    !process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY\n  ) {\n    return NextResponse.json({ products: [], total: 0, page, totalPages: 0 });\n  }\n\n  const supabase = await createClient();\n  if (!supabase) {\n    return NextResponse.json({ products: [], total: 0, page, totalPages: 0 });\n  }\n\n  const from = (page - 1) * ITEMS_PER_PAGE;\n  const to = from + ITEMS_PER_PAGE - 1;\n\n  let query = supabase\n    .from(\"products\")\n    .select(\"*\", { count: \"exact\" })\n    .eq(\"is_active\", true);\n\n  if (search) {\n    query = query.or(`name.ilike.%${search}%,description.ilike.%${search}%`);\n  }\n\n  const { data, count, error } = await query\n    .order(\"created_at\", { ascending: false })\n    .range(from, to);\n\n  if (error) {\n    return NextResponse.json({ error: error.message }, { status: 500 });\n  }\n\n  const total = count || 0;\n  const totalPages = Math.ceil(total / ITEMS_PER_PAGE);\n\n  return NextResponse.json({ products: data, total, page, totalPages });\n    }\n"}