34 lines
1.1 KiB
TypeScript
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;
|
|
}
|