38 lines
1.0 KiB
TypeScript
38 lines
1.0 KiB
TypeScript
import { backendRequest } from "@/lib/http/backend-client";
|
|
import {
|
|
jsonSuccess,
|
|
parseJsonBody,
|
|
withErrorHandling,
|
|
} from "@/lib/http/response";
|
|
import { parseLibraryUploadPresignPayload } from "@/lib/validation/library-resource";
|
|
|
|
type PresignUploadResponseDto = {
|
|
method: string;
|
|
upload_url: string;
|
|
headers: Record<string, string>;
|
|
storage_key: string;
|
|
public_url: string;
|
|
};
|
|
|
|
export async function POST(request: Request) {
|
|
return withErrorHandling(async () => {
|
|
const rawPayload = await parseJsonBody(request);
|
|
const payload = parseLibraryUploadPresignPayload(rawPayload);
|
|
const response = await backendRequest<PresignUploadResponseDto>(
|
|
"/library/uploads/presign",
|
|
{
|
|
method: "POST",
|
|
body: JSON.stringify(payload),
|
|
},
|
|
);
|
|
|
|
return jsonSuccess({
|
|
method: response.data.method,
|
|
uploadUrl: response.data.upload_url,
|
|
headers: response.data.headers,
|
|
storageKey: response.data.storage_key,
|
|
publicUrl: response.data.public_url,
|
|
});
|
|
});
|
|
}
|