storeDocument method
Implementation
Future<Document> storeDocument({
required String fileName,
required String filePath,
required String content,
int? fileSize,
String? fileHash,
}) async {
if (_embeddingGenerator == null) {
throw Exception('Embedding generator not set. Call setEmbeddingGenerator() first.');
}
final existingDoc = await getDocumentByFileName(fileName);
if (existingDoc != null) {
// Delete old chunks
for (var chunk in existingDoc.chunks) {
chunkBox.remove(chunk.id);
}
existingDoc.chunks.clear();
// Create and store new chunks
final chunks = _chunkContent(
content,
chunkSize: _chunkSize,
chunkOverlap: _chunkOverlap,
);
for (final chunkContent in chunks) {
final embedding = await _embeddingGenerator!(chunkContent);
final chunk = DocumentChunk(content: chunkContent, embeddings: embedding);
chunk.document.target = existingDoc;
existingDoc.chunks.add(chunk);
}
existingDoc.filePath = filePath;
existingDoc.fileSize = fileSize;
existingDoc.fileHash = fileHash;
existingDoc.updatedAt = DateTime.now();
await updateDocument(existingDoc);
return existingDoc;
} else {
final document = Document(
fileName: fileName,
filePath: filePath,
fileSize: fileSize,
fileHash: fileHash,
);
final chunks = _chunkContent(
content,
chunkSize: _chunkSize,
chunkOverlap: _chunkOverlap,
);
for (final chunkContent in chunks) {
final embedding = await _embeddingGenerator!(chunkContent);
final chunk = DocumentChunk(content: chunkContent, embeddings: embedding);
chunk.document.target = document;
document.chunks.add(chunk);
}
document.id = documentBox.put(document);
document.chunks.applyToDb();
return document;
}
}