My-Weekly-ToDo-List/src/app/api/user/export/route.ts

52 lines
1.7 KiB
TypeScript

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 });
}
}