pelagia-portal/App/lib/upload-files.ts
2026-05-18 23:18:58 +05:30

34 lines
1.1 KiB
TypeScript

import { linkDocument } from "@/app/actions/link-document";
export async function uploadAndLinkFiles(
poId: string,
files: File[],
type: "po-document" | "receipt" = "po-document"
): Promise<{ error: string } | null> {
for (const file of files) {
const signRes = await fetch("/api/files/sign", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ fileName: file.name, mimeType: file.type || "application/octet-stream", poId, type }),
});
if (!signRes.ok) return { error: `Failed to get upload URL for ${file.name}` };
const { uploadUrl, key } = await signRes.json();
const putRes = await fetch(uploadUrl, {
method: "PUT",
headers: { "Content-Type": file.type || "application/octet-stream" },
body: file,
});
if (!putRes.ok) return { error: `Failed to upload ${file.name}` };
const result = await linkDocument({
poId,
storageKey: key,
fileName: file.name,
fileSize: file.size,
mimeType: file.type || "application/octet-stream",
});
if ("error" in result) return { error: result.error };
}
return null;
}