Update service registrations and rename DocumentService methods

This commit is contained in:
Marco Minerva
2025-02-10 16:27:27 +01:00
parent a5f8425e61
commit 9e844f8a0f
3 changed files with 14 additions and 14 deletions
+5 -5
View File
@@ -57,8 +57,8 @@ builder.Services.AddSingleton<TextChunkerService>();
builder.Services.AddSingleton<TokenizerService>(); builder.Services.AddSingleton<TokenizerService>();
builder.Services.AddSingleton<ChatService>(); builder.Services.AddSingleton<ChatService>();
builder.Services.AddScoped<VectorSearchService>();
builder.Services.AddScoped<DocumentService>(); builder.Services.AddScoped<DocumentService>();
builder.Services.AddScoped<VectorSearchService>();
builder.Services.AddKeyedSingleton<IContentDecoder, PdfContentDecoder>(MediaTypeNames.Application.Pdf); builder.Services.AddKeyedSingleton<IContentDecoder, PdfContentDecoder>(MediaTypeNames.Application.Pdf);
builder.Services.AddKeyedSingleton<IContentDecoder, DocxContentDecoder>("application/vnd.openxmlformats-officedocument.wordprocessingml.document"); builder.Services.AddKeyedSingleton<IContentDecoder, DocxContentDecoder>("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
@@ -130,14 +130,14 @@ var documentsApiGroup = app.MapGroup("/api/documents").WithTags("Documents");
documentsApiGroup.MapGet(string.Empty, async (DocumentService documentService, CancellationToken cancellationToken) => documentsApiGroup.MapGet(string.Empty, async (DocumentService documentService, CancellationToken cancellationToken) =>
{ {
var documents = await documentService.GetDocumentsAsync(cancellationToken); var documents = await documentService.GetAsync(cancellationToken);
return TypedResults.Ok(documents); return TypedResults.Ok(documents);
}) })
.WithSummary("Gets the list of documents"); .WithSummary("Gets the list of documents");
documentsApiGroup.MapGet("{documentId:guid}/chunks", async (Guid documentId, DocumentService documentService, CancellationToken cancellationToken) => documentsApiGroup.MapGet("{documentId:guid}/chunks", async (Guid documentId, DocumentService documentService, CancellationToken cancellationToken) =>
{ {
var documents = await documentService.GetDocumentChunksAsync(documentId, cancellationToken); var documents = await documentService.GetChunksAsync(documentId, cancellationToken);
return TypedResults.Ok(documents); return TypedResults.Ok(documents);
}) })
.WithSummary("Gets the list of chunks of a given document") .WithSummary("Gets the list of chunks of a given document")
@@ -145,7 +145,7 @@ documentsApiGroup.MapGet("{documentId:guid}/chunks", async (Guid documentId, Doc
documentsApiGroup.MapGet("{documentId:guid}/chunks/{documentChunkId:guid}", async Task<Results<Ok<DocumentChunk>, NotFound>> (Guid documentId, Guid documentChunkId, DocumentService documentService, CancellationToken cancellationToken) => documentsApiGroup.MapGet("{documentId:guid}/chunks/{documentChunkId:guid}", async Task<Results<Ok<DocumentChunk>, NotFound>> (Guid documentId, Guid documentChunkId, DocumentService documentService, CancellationToken cancellationToken) =>
{ {
var chunk = await documentService.GetDocumentChunkEmbeddingAsync(documentId, documentChunkId, cancellationToken); var chunk = await documentService.GetChunkEmbeddingAsync(documentId, documentChunkId, cancellationToken);
if (chunk is null) if (chunk is null)
{ {
return TypedResults.NotFound(); return TypedResults.NotFound();
@@ -158,7 +158,7 @@ documentsApiGroup.MapGet("{documentId:guid}/chunks/{documentChunkId:guid}", asyn
documentsApiGroup.MapDelete("{documentId:guid}", async (Guid documentId, DocumentService documentService, CancellationToken cancellationToken) => documentsApiGroup.MapDelete("{documentId:guid}", async (Guid documentId, DocumentService documentService, CancellationToken cancellationToken) =>
{ {
await documentService.DeleteDocumentAsync(documentId, cancellationToken); await documentService.DeleteAsync(documentId, cancellationToken);
return TypedResults.NoContent(); return TypedResults.NoContent();
}) })
.WithSummary("Deletes a document") .WithSummary("Deletes a document")
@@ -7,33 +7,33 @@ namespace SqlDatabaseVectorSearch.Services;
public class DocumentService(ApplicationDbContext dbContext) public class DocumentService(ApplicationDbContext dbContext)
{ {
public async Task<IEnumerable<Document>> GetDocumentsAsync(CancellationToken cancellationToken = default) public async Task<IEnumerable<Document>> GetAsync(CancellationToken cancellationToken = default)
{ {
var documents = await dbContext.Documents.OrderBy(d => d.Name) var documents = await dbContext.Documents.OrderBy(d => d.Name)
.Select(d => new Document(d.Id, d.Name, d.CreationDate, d.Chunks.Count)) .Select(d => new Document(d.Id, d.Name, d.CreationDate, d.Chunks.Count))
.ToListAsync(cancellationToken: cancellationToken); .ToListAsync(cancellationToken);
return documents; return documents;
} }
public async Task<IEnumerable<DocumentChunk>> GetDocumentChunksAsync(Guid documentId, CancellationToken cancellationToken = default) public async Task<IEnumerable<DocumentChunk>> GetChunksAsync(Guid documentId, CancellationToken cancellationToken = default)
{ {
var documentChunks = await dbContext.DocumentChunks.Where(c => c.DocumentId == documentId).OrderBy(c => c.Index) var documentChunks = await dbContext.DocumentChunks.Where(c => c.DocumentId == documentId).OrderBy(c => c.Index)
.Select(c => new DocumentChunk(c.Id, c.Index, c.Content, null)) .Select(c => new DocumentChunk(c.Id, c.Index, c.Content, null))
.ToListAsync(cancellationToken: cancellationToken); .ToListAsync(cancellationToken);
return documentChunks; return documentChunks;
} }
public async Task<DocumentChunk?> GetDocumentChunkEmbeddingAsync(Guid documentId, Guid documentChunkId, CancellationToken cancellationToken = default) public async Task<DocumentChunk?> GetChunkEmbeddingAsync(Guid documentId, Guid documentChunkId, CancellationToken cancellationToken = default)
{ {
var documentChunk = await dbContext.DocumentChunks.Where(c => c.Id == documentChunkId && c.DocumentId == documentId) var documentChunk = await dbContext.DocumentChunks.Where(c => c.Id == documentChunkId && c.DocumentId == documentId)
.Select(c => new DocumentChunk(c.Id, c.Index, c.Content, c.Embedding)) .Select(c => new DocumentChunk(c.Id, c.Index, c.Content, c.Embedding))
.FirstOrDefaultAsync(cancellationToken: cancellationToken); .FirstOrDefaultAsync(cancellationToken);
return documentChunk; return documentChunk;
} }
public Task DeleteDocumentAsync(Guid documentId, CancellationToken cancellationToken = default) public Task DeleteAsync(Guid documentId, CancellationToken cancellationToken = default)
=> dbContext.Documents.Where(d => d.Id == documentId).ExecuteDeleteAsync(cancellationToken: cancellationToken); => dbContext.Documents.Where(d => d.Id == documentId).ExecuteDeleteAsync(cancellationToken);
} }
@@ -32,7 +32,7 @@ public class VectorSearchService(IServiceProvider serviceProvider, ApplicationDb
if (documentId.HasValue) if (documentId.HasValue)
{ {
// If the user is importing a document that already exists, delete the previous one. // If the user is importing a document that already exists, delete the previous one.
await documentService.DeleteDocumentAsync(documentId.Value, cancellationToken); await documentService.DeleteAsync(documentId.Value, cancellationToken);
} }
var document = new Entities.Document { Id = documentId.GetValueOrDefault(), Name = name, CreationDate = timeProvider.GetUtcNow() }; var document = new Entities.Document { Id = documentId.GetValueOrDefault(), Name = name, CreationDate = timeProvider.GetUtcNow() };