import { NextResponse } from 'next/server'; import { withAuth, withPermission } from '@/lib/api/helpers'; import { errorResponse, ValidationError } from '@/lib/errors'; import { uploadFile } from '@/lib/services/files'; import { uploadFileSchema } from '@/lib/validators/files'; export const POST = withAuth( withPermission('files', 'create', async (req, ctx) => { try { const formData = await req.formData(); const file = formData.get('file') as File | null; if (!file) { throw new ValidationError('No file provided'); } const buffer = Buffer.from(await file.arrayBuffer()); const metadata = uploadFileSchema.parse({ filename: (formData.get('filename') as string | null) ?? file.name, clientId: formData.get('clientId') as string | undefined, category: formData.get('category') as string | undefined, entityType: formData.get('entityType') as string | undefined, entityId: formData.get('entityId') as string | undefined, }); const result = await uploadFile( ctx.portId, ctx.portSlug, { buffer, originalName: file.name, mimeType: file.type, size: file.size, }, metadata, { userId: ctx.userId, portId: ctx.portId, ipAddress: ctx.ipAddress, userAgent: ctx.userAgent, }, ); return NextResponse.json({ data: result }, { status: 201 }); } catch (error) { return errorResponse(error); } }), );