63 lines
2.1 KiB
TypeScript
63 lines
2.1 KiB
TypeScript
import { NextResponse } from 'next/server';
|
|
import { getAdminDb } from '@/lib/firebase/admin';
|
|
|
|
export async function GET(request: Request) {
|
|
try {
|
|
const { searchParams } = new URL(request.url);
|
|
const projectId = searchParams.get('projectId');
|
|
const limit = parseInt(searchParams.get('limit') || '10');
|
|
|
|
console.log(`[API] Fetching sessions for project ${projectId}, limit ${limit}`);
|
|
|
|
const adminDb = getAdminDb();
|
|
let sessionsQuery = adminDb.collection('sessions');
|
|
|
|
// Filter by projectId if provided
|
|
if (projectId) {
|
|
sessionsQuery = sessionsQuery.where('projectId', '==', projectId) as any;
|
|
}
|
|
|
|
const sessionsSnapshot = await sessionsQuery
|
|
.orderBy('createdAt', 'desc')
|
|
.limit(limit)
|
|
.get();
|
|
|
|
const sessions = sessionsSnapshot.docs.map(doc => {
|
|
const data = doc.data();
|
|
return {
|
|
id: doc.id,
|
|
session_id: doc.id,
|
|
projectId: data.projectId,
|
|
userId: data.userId,
|
|
workspacePath: data.workspacePath,
|
|
workspaceName: data.workspaceName,
|
|
startTime: data.startTime,
|
|
endTime: data.endTime,
|
|
duration: data.duration,
|
|
duration_minutes: data.duration ? Math.round(data.duration / 60) : 0,
|
|
tokensUsed: data.tokensUsed || 0,
|
|
total_tokens: data.tokensUsed || 0,
|
|
cost: data.cost || 0,
|
|
estimated_cost_usd: data.cost || 0,
|
|
model: data.model || 'unknown',
|
|
primary_ai_model: data.model || 'unknown',
|
|
filesModified: data.filesModified || [],
|
|
summary: data.conversationSummary || null,
|
|
message_count: data.messageCount || 0,
|
|
ide_name: 'Cursor',
|
|
github_branch: data.githubBranch || null,
|
|
conversation: data.conversation || [],
|
|
file_changes: data.fileChanges || [],
|
|
createdAt: data.createdAt,
|
|
last_updated: data.updatedAt || data.createdAt,
|
|
};
|
|
});
|
|
|
|
console.log(`[API] Found ${sessions.length} sessions from Firebase`);
|
|
return NextResponse.json(sessions);
|
|
} catch (error) {
|
|
console.error('[API] Error fetching sessions:', error);
|
|
return NextResponse.json([]);
|
|
}
|
|
}
|