import type { APIRoute } from "astro"; interface KitUsage { kit_id: string; copies: number; downloads: number; } export const GET: APIRoute = async ({ url, locals }) => { try { const db = (locals as any).runtime?.env?.DB; // Return empty stats if no database (local dev mode) if (!db) { return new Response(JSON.stringify({}), { status: 200, headers: { "Content-Type": "application/json", "Cache-Control": "public, max-age=60", }, }); } const kits = url.searchParams.get("kits"); let result: Record< string, { copies: number; downloads: number; total: number } >; if (kits) { const ids = kits .split(",") .map((k) => k.trim()) .filter(Boolean); if (ids.length === 0) { return new Response(JSON.stringify({}), { status: 200, headers: { "Content-Type": "application/json" }, }); } const placeholders = ids.map(() => "?").join(","); const { results } = await db .prepare( `SELECT kit_id, copies, downloads FROM kit_usage_counts WHERE kit_id IN (${placeholders})`, ) .bind(...ids) .all(); result = {}; for (const row of results || []) { const total = (row.copies || 0) + (row.downloads || 0); result[row.kit_id] = { copies: row.copies || 0, downloads: row.downloads || 0, total, }; } } else { const { results } = await db .prepare( "SELECT kit_id, copies, downloads FROM kit_usage_counts ORDER BY (copies + downloads) DESC LIMIT 50", ) .all(); result = {}; for (const row of results || []) { const total = (row.copies || 0) + (row.downloads || 0); result[row.kit_id] = { copies: row.copies || 0, downloads: row.downloads || 0, total, }; } } return new Response(JSON.stringify(result), { status: 200, headers: { "Content-Type": "application/json", "Cache-Control": "public, max-age=60", }, }); } catch (error) { // Silently return empty stats in dev mode (no D1 database) // Log error only if it's not a "table doesn't exist" error const errorMessage = String(error); if (!errorMessage.includes("no such table")) { console.error("Kit stats error:", error); } // Return empty stats gracefully return new Response(JSON.stringify({}), { status: 200, headers: { "Content-Type": "application/json", "Cache-Control": "public, max-age=60", }, }); } }; export const prerender = false;