21 lines
1.0 KiB
TypeScript
21 lines
1.0 KiB
TypeScript
import { eq } from "drizzle-orm";
|
|
import { getDb } from "@/db";
|
|
import { commissionPayments } from "@/db/schema";
|
|
import { authorizeTicket } from "@/lib/commission/tickets";
|
|
import { getMediaStorage } from "@/lib/media/storage";
|
|
import { errorResponse, HttpError } from "@/lib/security/http";
|
|
|
|
export async function GET(_request: Request, context: RouteContext<"/api/commission/tickets/[id]/slip">) {
|
|
try {
|
|
const { id } = await context.params;
|
|
await authorizeTicket(id);
|
|
const [payment] = await getDb().select({ key: commissionPayments.slipObjectKey,
|
|
type: commissionPayments.slipMimeType }).from(commissionPayments)
|
|
.where(eq(commissionPayments.ticketId, id)).limit(1);
|
|
if (!payment) throw new HttpError(404, "slip-not-found");
|
|
const file = (await getMediaStorage()).file(payment.key);
|
|
return new Response(await file.bytes(), { headers: { "Content-Type": payment.type,
|
|
"Cache-Control": "private, no-store", "X-Content-Type-Options": "nosniff" } });
|
|
} catch (cause) { return errorResponse(cause); }
|
|
}
|