Files
buzz-sheet/app/api/commission/tickets/[id]/slip/route.ts
T
gunshiz 0022625edb
CI / Verify (push) Successful in 3m14s
CI / Build immutable images and deploy (push) Successful in 4m0s
feat : big update
2026-10-01 18:37:15 +07:00

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); }
}