app/routes/api.jobs.$jobId.status.tsx (39 lines of code) (raw):
import { json, type LoaderFunctionArgs } from "@remix-run/node";
import { JobService } from "~/lib/jobService.remix";
import {
extractCredentialsFromCookie,
hasValidCredentials,
} from "~/lib/server/auth";
// GET /api/jobs/:jobId/status - Get job status
export async function loader({ request, params }: LoaderFunctionArgs) {
const jobId = params.jobId;
if (!jobId) {
return json({ error: "Job ID is required" }, { status: 400 });
}
// Check authentication
const cookieHeader = request.headers.get("Cookie");
const credentials = extractCredentialsFromCookie(cookieHeader);
if (!hasValidCredentials(credentials)) {
return json({ error: "Unauthorized" }, { status: 401 });
}
try {
const job = await JobService.getJob(jobId);
if (!job) {
return json({ error: "Job not found" }, { status: 404 });
}
// Check if the job belongs to the authenticated user
const username = credentials?.hfUserInfo?.username;
if (job.author && job.author !== username) {
return json(
{ error: "Unauthorized - This job belongs to another user" },
{ status: 403 }
);
}
return json({
id: job.id,
status: job.status,
updatedAt: job.updatedAt,
changes: job.changes || null,
});
} catch (error) {
console.error("Error fetching job status:", error);
return json({ error: "Failed to fetch job status" }, { status: 500 });
}
}