import { getAdminDb } from '@/lib/firebase/admin'; import { FieldValue } from 'firebase-admin/firestore'; import type { ChatExtractionRecord } from '@/lib/types/chat-extraction'; const COLLECTION = 'chat_extractions'; interface CreateChatExtractionInput { projectId: string; knowledgeItemId: string; data: TData; overallCompletion: number; overallConfidence: number; } export async function createChatExtraction( input: CreateChatExtractionInput, ): Promise> { const adminDb = getAdminDb(); const docRef = adminDb.collection(COLLECTION).doc(); const payload = { id: docRef.id, projectId: input.projectId, knowledgeItemId: input.knowledgeItemId, data: input.data, overallCompletion: input.overallCompletion, overallConfidence: input.overallConfidence, createdAt: FieldValue.serverTimestamp(), updatedAt: FieldValue.serverTimestamp(), }; await docRef.set(payload); const snapshot = await docRef.get(); return snapshot.data() as ChatExtractionRecord; } export async function listChatExtractions( projectId: string, ): Promise[]> { const adminDb = getAdminDb(); const querySnapshot = await adminDb .collection(COLLECTION) .where('projectId', '==', projectId) .orderBy('createdAt', 'desc') .get(); return querySnapshot.docs.map( (doc) => doc.data() as ChatExtractionRecord, ); } export async function getChatExtraction( extractionId: string, ): Promise | null> { const adminDb = getAdminDb(); const docRef = adminDb.collection(COLLECTION).doc(extractionId); const snapshot = await docRef.get(); if (!snapshot.exists) { return null; } return snapshot.data() as ChatExtractionRecord; }