import { NextRequest, NextResponse } from 'next/server'; import { getServerSession } from 'next-auth'; import { authOptions } from '../../auth/[...nextauth]/route'; import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); export async function GET(request: NextRequest) { const session = await getServerSession(authOptions); if (!session?.user?.email) return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }); try { const user = await prisma.user.findUnique({ where: { email: session.user.email }, include: { tasks: true, calendarConnections: true, accounts: true } }); if (!user) return NextResponse.json({ error: 'User not found' }, { status: 404 }); // Sanitize const exportData = { profile: { name: user.name, email: user.email, joined: user.createdAt, timezone: user.timezone }, tasks: user.tasks, connections: user.calendarConnections.map(c => ({ provider: c.provider, connectedAt: c.createdAt, calendars: c.calendars })) }; // Return as file download return new NextResponse(JSON.stringify(exportData, null, 2), { headers: { 'Content-Type': 'application/json', 'Content-Disposition': `attachment; filename="data-export-${new Date().toISOString().split('T')[0]}.json"` } }); } catch (error) { console.error('Export failed:', error); return NextResponse.json({ error: 'Export failed' }, { status: 500 }); } }