import { NextRequest, NextResponse } from 'next/server'
import { createClient } from '@supabase/supabase-js'
// Create server-side Supabase client with user session
function createServerSupabaseClient(request: Request) {
const authHeader = request.headers.get('authorization')
return createClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!,
{
auth: {
autoRefreshToken: false,
persistSession: false
},
global: {
headers: authHeader ? {
Authorization: authHeader
} : {}
}
}
)
}
export async function GET(req: NextRequest) {
try {
const supabase = createServerSupabaseClient(req)
// Get current user
const { data: { user }, error: authError } = await supabase.auth.getUser()
if (authError || !user) {
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
}
const { searchParams } = new URL(req.url)
const bookId = searchParams.get('bookId')
const limit = parseInt(searchParams.get('limit') || '20')
const offset = parseInt(searchParams.get('offset') || '0')
// Build query
let query = supabase
.from('generated_images')
.select('*')
.eq('user_id', user.id)
.order('created_at', { ascending: false })
.range(offset, offset + limit - 1)
// Filter by book if specified
if (bookId) {
query = query.eq('book_id', bookId)
}
const { data: images, error } = await query
if (error) {
return NextResponse.json({ error: 'Failed to fetch images' }, { status: 500 })
}
return NextResponse.json({
images: images || [],
pagination: {
limit,
offset,
hasMore: images?.length === limit
}
})
} catch (error) {
return NextResponse.json({ error: 'Failed to fetch images' }, { status: 500 })
}
}
// DELETE endpoint to remove generated images
export async function DELETE(req: NextRequest) {
try {
const supabase = createServerSupabaseClient(req)
// Get current user
const { data: { user }, error: authError } = await supabase.auth.getUser()
if (authError || !user) {
return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
}
const { imageId } = await req.json()
if (!imageId) {
return NextResponse.json({ error: 'Image ID is required' }, { status: 400 })
}
// Delete the image (RLS will ensure user can only delete their own images)
const { error } = await supabase
.from('generated_images')
.delete()
.eq('id', imageId)
.eq('user_id', user.id)
if (error) {
return NextResponse.json({ error: 'Failed to delete image' }, { status: 500 })
}
return NextResponse.json({ success: true })
} catch (error) {
return NextResponse.json({ error: 'Failed to delete image' }, { status: 500 })
}
}