import type { APIRoute } from "astro";
import { getDb } from "@/lib/db";
import { cachedRepos, cachedUsers } from "@/lib/db/schema";
import { like, or } from "drizzle-orm";
export const prerender = false;
export const GET: APIRoute = async ({ url }) => {
try {
const q = url.searchParams.get("q") || "";
if (!q || q.length < 2) {
return new Response(JSON.stringify({ success: true, data: { repos: [], users: [] } }), { status: 200 });
}
const db = getDb() as any;
const searchPattern = `%${q}%`;
const repos = await db.query.cachedRepos.findMany({
where: or(
like(cachedRepos.fullName, searchPattern),
like(cachedRepos.description, searchPattern)
),
limit: 10,
with: { instance: true }
});
const users = await db.query.cachedUsers.findMany({
where: or(
like(cachedUsers.username, searchPattern),
like(cachedUsers.displayName, searchPattern)
),
limit: 5,
with: { instance: true }
});
return new Response(JSON.stringify({ success: true, data: { repos, users } }), { status: 200 });
} catch (error: any) {
return new Response(JSON.stringify({ success: false, error: error.message }), { status: 500 });
}
};