import { mkdir, readdir, writeFile } from "fs/promises"; import path from "path"; import { NextResponse } from "next/server"; import { requireAdminSession } from "@/lib/admin/auth"; const uploadDir = path.join(process.cwd(), "public", "uploads", "images"); const allowedTypes = new Set(["image/jpeg", "image/png", "image/webp", "application/pdf"]); async function ensureUploadDir() { await mkdir(uploadDir, { recursive: true }); } export async function GET() { if (!await requireAdminSession()) return NextResponse.json({ message: "Nicht autorisiert." }, { status: 401 }); await ensureUploadDir(); const files = await readdir(uploadDir); return NextResponse.json({ files: files.map((file) => ({ name: file, url: `/uploads/images/${file}` })), }); } export async function POST(request: Request) { if (!await requireAdminSession()) return NextResponse.json({ message: "Nicht autorisiert." }, { status: 401 }); await ensureUploadDir(); const form = await request.formData(); const file = form.get("file"); if (!(file instanceof File) || !allowedTypes.has(file.type) || file.size > 5 * 1024 * 1024) { return NextResponse.json({ message: "Bitte eine JPG-, PNG-, WebP- oder PDF-Datei bis 5 MB hochladen." }, { status: 400 }); } const extension = path.extname(file.name).toLowerCase(); const safeName = `${Date.now()}-${file.name.toLowerCase().replace(/[^a-z0-9.-]/g, "-")}`; const target = safeName.endsWith(extension) ? safeName : `${safeName}${extension}`; await writeFile(path.join(uploadDir, target), Buffer.from(await file.arrayBuffer())); return NextResponse.redirect(new URL("/admin/medien?uploaded=1", request.url)); }