import { NextRequest, NextResponse } from 'next/server' import { createServerSupabaseClient } from '@/lib/supabase' export async function POST(request: NextRequest) { try { const formData = await request.formData() const file = formData.get('file') as File const userId = formData.get('userId') as string if (!file) { return NextResponse.json({ error: 'No file provided' }, { status: 400 }) } if (!userId) { return NextResponse.json({ error: 'User ID required' }, { status: 400 }) } // Validate file type if (!file.type.startsWith('image/')) { return NextResponse.json({ error: 'File must be an image' }, { status: 400 }) } // Validate file size (max 5MB) if (file.size > 5 * 1024 * 1024) { return NextResponse.json({ error: 'File size must be less than 5MB' }, { status: 400 }) } const supabase = createServerSupabaseClient() // Generate unique filename const fileExt = file.name.split('.').pop() const fileName = `${userId}/${Date.now()}-${Math.random().toString(36).substring(2)}.${fileExt}` const filePath = `book-covers/${fileName}` // Convert file to buffer const bytes = await file.arrayBuffer() const buffer = Buffer.from(bytes) // Upload to Supabase Storage const { data, error } = await supabase.storage .from('book-covers') .upload(filePath, buffer, { contentType: file.type, cacheControl: '3600', upsert: false }) if (error) { console.error('Storage upload error:', error) return NextResponse.json({ error: 'Failed to upload image' }, { status: 500 }) } // Get public URL const { data: { publicUrl } } = supabase.storage .from('book-covers') .getPublicUrl(data.path) return NextResponse.json({ success: true, imageUrl: publicUrl, path: data.path }) } catch (error) { console.error('Upload API error:', error) return NextResponse.json({ error: 'Internal server error' }, { status: 500 }) } }