import { db } from '$lib/server/db'; import { sql } from 'drizzle-orm'; import { json } from '@sveltejs/kit'; import type { RequestHandler } from './$types'; export const GET: RequestHandler = async ({ url }) => { const q = (url.searchParams.get('q') ?? '').trim().slice(0, 100); const dimension = url.searchParams.get('dimension') ?? 'item'; const offset = Math.min(100_000, Math.max(0, Number(url.searchParams.get('offset') ?? 0) || 0)); const limit = Math.min(1000, Math.max(1, Number(url.searchParams.get('limit') ?? 50) || 50)); const pattern = `%${q.replaceAll('\\', '\\\\').replaceAll('%', '\\%').replaceAll('_', '\\_')}%`; if (dimension === 'item') { const rows = await db.execute(sql`SELECT id, name, market_hash_name, icon_url FROM cs_market_items WHERE name ILIKE ${pattern} ESCAPE '\' ORDER BY name, id LIMIT ${limit} OFFSET ${offset}`); return json({ results: rows }); } if (!/^[a-z][a-z0-9_]*$/.test(dimension)) return json({ error: 'Invalid dimension' }, { status: 400 }); const rows = await db.execute(sql`SELECT value, count(*)::int AS items FROM cs_item_dimensions WHERE key = ${dimension} AND value ILIKE ${pattern} ESCAPE '\' GROUP BY value ORDER BY value LIMIT ${limit} OFFSET ${offset}`); return json({ results: rows }); };