Files
triggerdotdev--trigger.dev/apps/webapp/app/routes/api.v1.batches.$batchParam.results.ts
2026-07-13 13:32:57 +08:00

54 lines
1.8 KiB
TypeScript

import type { LoaderFunctionArgs } from "@remix-run/server-runtime";
import { json } from "@remix-run/server-runtime";
import { z } from "zod";
import { $replica, runOpsNewReplica, runOpsSplitReadEnabled } from "~/db.server";
import { ApiBatchResultsPresenter } from "~/presenters/v3/ApiBatchResultsPresenter.server";
import { authenticateApiRequest } from "~/services/apiAuth.server";
import { logger } from "~/services/logger.server";
const ParamsSchema = z.object({
/* This is the batch friendly ID */
batchParam: z.string(),
});
export async function loader({ request, params }: LoaderFunctionArgs) {
try {
// Authenticate the request
const authenticationResult = await authenticateApiRequest(request);
if (!authenticationResult) {
return json({ error: "Invalid or Missing API Key" }, { status: 401 });
}
const parsed = ParamsSchema.safeParse(params);
if (!parsed.success) {
return json({ error: "Invalid or missing run ID" }, { status: 400 });
}
const { batchParam } = parsed.data;
try {
const presenter = new ApiBatchResultsPresenter(undefined, undefined, {
newClient: runOpsNewReplica,
legacyReplica: $replica,
splitEnabled: runOpsSplitReadEnabled,
});
const result = await presenter.call(batchParam, authenticationResult.environment);
if (!result) {
return json({ error: "Batch not found" }, { status: 404 });
}
return json(result);
} catch (error) {
logger.error("Failed to load batch results", { error });
return json({ error: "Something went wrong, please try again." }, { status: 500 });
}
} catch (error) {
if (error instanceof Response) throw error;
logger.error("Failed to load batch results (outer)", { error });
return json({ error: "Internal Server Error" }, { status: 500 });
}
}