import { NextResponse } from "next/server"; import { db } from "@/db"; import { cdn } from "@/db/schema"; import { requireDiscordId } from "@/lib/auth/auth"; import { validateImageUploadFile, cdnUrl } from "@/lib/cdn/cdn-images"; export async function POST(req: Request) { let discordId: string; try { discordId = await requireDiscordId(); } catch { return NextResponse.json({ error: "Unauthorized" }, { status: 401 }); } try { const formData = await req.formData(); const file = formData.get("file"); if (!(file instanceof File)) { return NextResponse.json({ error: "No file provided" }, { status: 400 }); } const data = Buffer.from(await file.arrayBuffer()); validateImageUploadFile(file, data); const [record] = await db .insert(cdn) .values({ data, name: file.name || null, type: file.type, size: file.size, ownerDiscordId: discordId, }) .returning({ id: cdn.id }); return NextResponse.json({ id: record.id, url: cdnUrl(record.id) }); } catch (error) { const message = error instanceof Error ? error.message : "Internal server error"; return NextResponse.json({ error: message }, { status: 400 }); } }