44 lines
1.5 KiB
TypeScript
44 lines
1.5 KiB
TypeScript
import type { LoaderFunctionArgs } from "@remix-run/node";
|
|
import { json } from "@remix-run/node";
|
|
import { getManufacturers, getModelsByManufacturer, getBodyType } from "~/lib/car-dataset-management.server";
|
|
|
|
export async function loader({ request }: LoaderFunctionArgs) {
|
|
const url = new URL(request.url);
|
|
const action = url.searchParams.get("action");
|
|
const manufacturer = url.searchParams.get("manufacturer");
|
|
const model = url.searchParams.get("model");
|
|
|
|
try {
|
|
switch (action) {
|
|
case "manufacturers": {
|
|
const manufacturers = await getManufacturers();
|
|
return json({ success: true, data: manufacturers });
|
|
}
|
|
|
|
case "models": {
|
|
if (!manufacturer) {
|
|
return json({ success: false, error: "Manufacturer is required" }, { status: 400 });
|
|
}
|
|
const models = await getModelsByManufacturer(manufacturer);
|
|
return json({ success: true, data: models });
|
|
}
|
|
|
|
case "bodyType": {
|
|
if (!manufacturer || !model) {
|
|
return json({ success: false, error: "Manufacturer and model are required" }, { status: 400 });
|
|
}
|
|
const bodyType = await getBodyType(manufacturer, model);
|
|
return json({ success: true, data: bodyType });
|
|
}
|
|
|
|
default:
|
|
return json({ success: false, error: "Invalid action" }, { status: 400 });
|
|
}
|
|
} catch (error) {
|
|
console.error("Car dataset API error:", error);
|
|
return json(
|
|
{ success: false, error: "Internal server error" },
|
|
{ status: 500 }
|
|
);
|
|
}
|
|
} |