Optimize delete logic

This commit is contained in:
Marco Minerva
2024-07-19 11:31:54 +02:00
parent c98a230586
commit 6e716f3984
2 changed files with 11 additions and 14 deletions
-1
View File
@@ -19,7 +19,6 @@ var appSettings = builder.Services.ConfigureAndGet<AppSettings>(builder.Configur
builder.Services.AddSqlServer<ApplicationDbContext>(builder.Configuration.GetConnectionString("SqlConnection"), options =>
{
options.EnableRetryOnFailure(3, TimeSpan.FromSeconds(1), null);
options.UseVectorSearch();
});
@@ -21,10 +21,13 @@ public class VectorSearchService(ApplicationDbContext dbContext, ITextEmbeddingG
// Extract the contents of the file (current, only PDF are supported).
var content = await GetContentAsync(stream);
await dbContext.Database.BeginTransactionAsync();
if (documentId.HasValue)
{
// If the user is importing a document that already exists, delete the previous one.
await DeleteDocumentAsync(documentId.Value, saveChanges: false);
await dbContext.DocumentChunks.Where(c => c.DocumentId == documentId).ExecuteDeleteAsync();
await dbContext.Documents.Where(d => d.Id == documentId).ExecuteDeleteAsync();
}
else
{
@@ -47,6 +50,8 @@ public class VectorSearchService(ApplicationDbContext dbContext, ITextEmbeddingG
}
await dbContext.SaveChangesAsync();
await dbContext.Database.CommitTransactionAsync();
return documentId.Value;
}
@@ -77,21 +82,14 @@ public class VectorSearchService(ApplicationDbContext dbContext, ITextEmbeddingG
return documentChunk;
}
public async Task DeleteDocumentAsync(Guid documentId, bool saveChanges = true)
public async Task DeleteDocumentAsync(Guid documentId)
{
var document = await dbContext.Documents.Include(d => d.Chunks).FirstOrDefaultAsync(d => d.Id == documentId);
if (document is null)
{
return;
}
await dbContext.Database.BeginTransactionAsync();
dbContext.DocumentChunks.RemoveRange(document.Chunks);
dbContext.Documents.Remove(document);
await dbContext.DocumentChunks.Where(c => c.DocumentId == documentId).ExecuteDeleteAsync();
await dbContext.Documents.Where(d => d.Id == documentId).ExecuteDeleteAsync();
if (saveChanges)
{
await dbContext.SaveChangesAsync();
}
await dbContext.Database.CommitTransactionAsync();
}
public async Task<Response> AskQuestionAsync(Question question, bool reformulate = true)