Better transaction on document save

This commit is contained in:
Marco Minerva
2024-06-24 10:31:57 +02:00
parent 7a97000c10
commit 1840a63d75
@@ -24,7 +24,7 @@ public class VectorSearchService(ApplicationDbContext dbContext, ITextEmbeddingG
if (documentId.HasValue)
{
// If the user is importing a document that already exists, delete the previous one.
await DeleteDocumentAsync(documentId.Value);
await DeleteDocumentAsync(documentId.Value, saveChanges: false);
}
else
{
@@ -58,11 +58,22 @@ public class VectorSearchService(ApplicationDbContext dbContext, ITextEmbeddingG
return documents;
}
public async Task DeleteDocumentAsync(Guid documentId)
public async Task DeleteDocumentAsync(Guid documentId, bool saveChanges = true)
{
var document = await dbContext.Documents.Include(d => d.DocumentChunks).FirstOrDefaultAsync(d => d.Id == documentId);
if (document is null)
{
return;
}
dbContext.DocumentChunks.RemoveRange(document.DocumentChunks);
dbContext.Documents.Remove(document);
if (saveChanges)
{
await DeleteDocumentInternalAsync(documentId);
await dbContext.SaveChangesAsync();
}
}
public async Task<Response?> AskQuestionAsync(Question question, bool reformulate = true)
{
@@ -85,7 +96,7 @@ public class VectorSearchService(ApplicationDbContext dbContext, ITextEmbeddingG
{
var content = new StringBuilder();
// Reads the content of the PDF document using PdfPig.
// Read the content of the PDF document.
using var pdfDocument = PdfDocument.Open(stream);
foreach (var page in pdfDocument.GetPages().Where(x => x is not null))
@@ -96,16 +107,4 @@ public class VectorSearchService(ApplicationDbContext dbContext, ITextEmbeddingG
return Task.FromResult(content.ToString());
}
private async Task DeleteDocumentInternalAsync(Guid documentId)
{
var document = await dbContext.Documents.Include(d => d.DocumentChunks).FirstOrDefaultAsync(d => d.Id == documentId);
if (document is null)
{
return;
}
dbContext.DocumentChunks.RemoveRange(document.DocumentChunks);
dbContext.Documents.Remove(document);
}
}