pelagia-portal/App/app/api/files/sign/route.ts
2026-05-18 23:18:58 +05:30

34 lines
1 KiB
TypeScript

import { auth } from "@/auth";
import { generateUploadUrl, buildStorageKey } from "@/lib/storage";
import { NextRequest, NextResponse } from "next/server";
import { z } from "zod";
const signSchema = z.object({
fileName: z.string().min(1),
mimeType: z.string().min(1),
poId: z.string().min(1),
type: z.enum(["po-document", "receipt"]),
});
export async function POST(request: NextRequest) {
const session = await auth();
if (!session?.user) {
return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
}
const body = await request.json();
const parsed = signSchema.safeParse(body);
if (!parsed.success) {
return NextResponse.json({ error: "Invalid request" }, { status: 400 });
}
const { fileName, mimeType, poId, type } = parsed.data;
const key = buildStorageKey(type, poId, fileName);
try {
const uploadUrl = await generateUploadUrl(key, mimeType);
return NextResponse.json({ uploadUrl, key });
} catch {
return NextResponse.json({ error: "Failed to generate upload URL" }, { status: 500 });
}
}