import { readFile } from "fs/promises"; import { NextResponse } from "next/server"; import path from "path"; import { resolveMediaUploadPath } from "@/lib/media-storage"; type MediaFileRouteProps = { params: Promise<{ segments: string[]; }>; }; export const dynamic = "force-dynamic"; const CONTENT_TYPES: Record = { ".ico": "image/x-icon", ".jpg": "image/jpeg", ".jpeg": "image/jpeg", ".png": "image/png", ".webp": "image/webp", ".svg": "image/svg+xml", ".pdf": "application/pdf", }; export async function GET(_: Request, { params }: MediaFileRouteProps) { const { segments } = await params; const relativePath = segments.join("/"); const publicPath = `/uploads/media/${relativePath}`; try { const absolutePath = resolveMediaUploadPath(publicPath); const fileBuffer = await readFile(absolutePath); const contentType = CONTENT_TYPES[path.extname(absolutePath).toLowerCase()] ?? "application/octet-stream"; return new NextResponse(fileBuffer, { status: 200, headers: { "Content-Type": contentType, "Cache-Control": "public, max-age=31536000, immutable", }, }); } catch { return new NextResponse("Not Found", { status: 404, }); } }