ui changes and cs prices
All checks were successful
Test and deploy staging / staging (push) Successful in 11m52s
All checks were successful
Test and deploy staging / staging (push) Successful in 11m52s
This commit is contained in:
24
src/routes/projects/cs-prices/api/search/+server.ts
Normal file
24
src/routes/projects/cs-prices/api/search/+server.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
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 });
|
||||
};
|
||||
Reference in New Issue
Block a user