chore: edge functions

This commit is contained in:
Cory Dransfeldt 2024-12-03 04:50:43 -08:00
parent 76a50caaee
commit 7a3b40842c
No known key found for this signature in database
16 changed files with 950 additions and 1346 deletions

59
edge-functions/search.js Normal file
View file

@ -0,0 +1,59 @@
import { createClient } from "@supabase/supabase-js";
export default async (req) => {
const supabaseUrl = Netlify.env.get("SUPABASE_URL");
const supabaseKey = Netlify.env.get("SUPABASE_KEY");
const supabase = createClient(supabaseUrl, supabaseKey);
try {
const url = new URL(req.url);
const searchParams = url.searchParams;
const query = searchParams.get("q")?.trim() || "";
const rawTypes = searchParams.get("type") || "";
const types = rawTypes ? rawTypes.split(",") : null;
const page = parseInt(searchParams.get("page") || "1", 10);
const pageSize = parseInt(searchParams.get("pageSize") || "10", 10);
const offset = (page - 1) * pageSize;
if (!query) {
return new Response(
JSON.stringify({ error: "Missing or invalid 'q' parameter" }),
{ status: 400, headers: { "Content-Type": "application/json" } },
);
}
const { data, error } = await supabase.rpc("search_optimized_index", {
search_query: query,
page_size: pageSize,
page_offset: offset,
types: types && types.length ? types : null,
});
if (error) {
console.error("Error fetching search data:", error.message);
return new Response(
JSON.stringify({
results: [],
total: 0,
error: error.message,
}),
{ status: 500, headers: { "Content-Type": "application/json" } },
);
}
const total = data.length > 0 ? data[0].total_count : 0;
const results = data.map(({ total_count, ...item }) => item);
return new Response(JSON.stringify({ results, total, page, pageSize }), {
status: 200,
headers: { "Content-Type": "application/json" },
});
} catch (error) {
console.error("Unexpected error:", error.message);
return new Response(JSON.stringify({ error: error.message }), {
status: 500,
headers: { "Content-Type": "application/json" },
});
}
};