Files
arkvault/src/routes/api/file/upload/+server.ts
static d7396945df Date 관련 Zod 스키마 수정
z.coerce.date()가 아닌 z.string().datetime()을 사용하도록 변경하여, 번거롭더라도 버그를 줄일 수 있는 방향으로 수정하였습니다.
2025-01-08 22:08:20 +09:00

38 lines
1.2 KiB
TypeScript

import { error, text } from "@sveltejs/kit";
import { authorize } from "$lib/server/modules/auth";
import { fileUploadRequest } from "$lib/server/schemas";
import { uploadFile } from "$lib/server/services/file";
import type { RequestHandler } from "./$types";
export const POST: RequestHandler = async ({ request, cookies }) => {
const { userId } = await authorize(cookies, "activeClient");
const form = await request.formData();
const metadata = form.get("metadata");
const content = form.get("content");
if (typeof metadata !== "string" || !(content instanceof File)) {
error(400, "Invalid request body");
}
const zodRes = fileUploadRequest.safeParse(JSON.parse(metadata));
if (!zodRes.success) error(400, "Invalid request body");
const { parentId, mekVersion, dek, dekVersion, contentType, contentIv, name, nameIv } =
zodRes.data;
await uploadFile(
{
userId,
parentId,
mekVersion,
encDek: dek,
dekVersion: new Date(dekVersion),
contentType,
encContentIv: contentIv,
encName: name,
encNameIv: nameIv,
},
content.stream(),
);
return text("File uploaded", { headers: { "Content-Type": "text/plain" } });
};