feat(api/ebay): add maxItems parameter and error handling

This commit is contained in:
2026-01-23 09:53:00 -05:00
parent 7b106c91ce
commit 050fd0adba

View File

@@ -5,56 +5,61 @@ import { fetchEbayItems } from "@marketplace-scrapers/core";
* Search eBay for listings (default: Buy It Now only, Canada only) * Search eBay for listings (default: Buy It Now only, Canada only)
*/ */
export async function ebayRoute(req: Request): Promise<Response> { export async function ebayRoute(req: Request): Promise<Response> {
const reqUrl = new URL(req.url); try {
const reqUrl = new URL(req.url);
const SEARCH_QUERY = const SEARCH_QUERY =
req.headers.get("query") || reqUrl.searchParams.get("q") || null; req.headers.get("query") || reqUrl.searchParams.get("q") || null;
if (!SEARCH_QUERY) if (!SEARCH_QUERY)
return Response.json( return Response.json(
{ {
message: message:
"Request didn't have 'query' header or 'q' search parameter!", "Request didn't have 'query' header or 'q' search parameter!",
}, },
{ status: 400 }, { status: 400 },
); );
// Parse optional parameters with defaults const minPriceParam = reqUrl.searchParams.get("minPrice");
const minPrice = reqUrl.searchParams.get("minPrice") const minPrice = minPriceParam ? parseInt(minPriceParam, 10) : undefined;
? parseInt(reqUrl.searchParams.get("minPrice")!) const maxPriceParam = reqUrl.searchParams.get("maxPrice");
: undefined; const maxPrice = maxPriceParam ? parseInt(maxPriceParam, 10) : undefined;
const maxPrice = reqUrl.searchParams.get("maxPrice") const strictMode = reqUrl.searchParams.get("strictMode") === "true";
? parseInt(reqUrl.searchParams.get("maxPrice")!) const buyItNowOnly = reqUrl.searchParams.get("buyItNowOnly") !== "false";
: undefined; const canadaOnly = reqUrl.searchParams.get("canadaOnly") !== "false";
const strictMode = reqUrl.searchParams.get("strictMode") === "true"; const exclusionsParam = reqUrl.searchParams.get("exclusions");
const buyItNowOnly = reqUrl.searchParams.get("buyItNowOnly") !== "false"; const exclusions = exclusionsParam
const canadaOnly = reqUrl.searchParams.get("canadaOnly") !== "false"; ? exclusionsParam.split(",").map((s) => s.trim())
const exclusionsParam = reqUrl.searchParams.get("exclusions"); : [];
const exclusions = exclusionsParam ? exclusionsParam.split(",").map(s => s.trim()) : []; const keywordsParam = reqUrl.searchParams.get("keywords");
const keywordsParam = reqUrl.searchParams.get("keywords"); const keywords = keywordsParam
const keywords = keywordsParam ? keywordsParam.split(",").map(s => s.trim()) : [SEARCH_QUERY]; ? keywordsParam.split(",").map((s) => s.trim())
: [SEARCH_QUERY];
try { const maxItemsParam = reqUrl.searchParams.get("maxItems");
const items = await fetchEbayItems(SEARCH_QUERY, 5, { const maxItems = maxItemsParam ? parseInt(maxItemsParam, 10) : undefined;
minPrice,
maxPrice, const items = await fetchEbayItems(SEARCH_QUERY, 1, {
strictMode, minPrice,
exclusions, maxPrice,
keywords, strictMode,
buyItNowOnly, exclusions,
canadaOnly, keywords,
}); buyItNowOnly,
if (!items || items.length === 0) canadaOnly,
return Response.json( });
{ message: "Search didn't return any results!" },
{ status: 404 }, const results = maxItems ? items.slice(0, maxItems) : items;
);
return Response.json(items, { status: 200 }); if (!results || results.length === 0)
} catch (error) { return Response.json(
console.error("eBay scraping error:", error); { message: "Search didn't return any results!" },
const errorMessage = error instanceof Error ? error.message : "Unknown error occurred"; { status: 404 },
return Response.json( );
{ message: errorMessage }, return Response.json(results, { status: 200 });
{ status: 400 }, } catch (error) {
); console.error("eBay scraping error:", error);
} const errorMessage =
error instanceof Error ? error.message : "Unknown error occurred";
return Response.json({ message: errorMessage }, { status: 400 });
}
} }