Files
SqlDatabaseVectorSearch/SqlDatabaseVectorSearch/Services/DocumentService.cs
T
Marco Minerva be3f0dbf09 Update document handling and styling improvements
- Changed `app.css` path in `App.razor`.
- Refactored `Documents.razor` to improve form handling:
  - Removed `VectorSearchService` injection; added `IServiceProvider` and `IJSRuntime`.
  - Updated header from `<h2>` to `<h4>`.
  - Introduced `uploadDocumentRequest` for form state management.
  - Modified document ID input for optional GUID with validation.
  - Disabled upload button when no file is selected.
  - Enhanced document loading logic with scoped service provider.
  - Updated deletion logic to handle multiple document IDs.

- Added method in `DocumentService.cs` for bulk document deletion.
- Restructured `app.css` for improved styling and new validation/error message styles.
2025-02-17 12:32:12 +01:00

42 lines
1.8 KiB
C#

using System.Data;
using Microsoft.EntityFrameworkCore;
using SqlDatabaseVectorSearch.DataAccessLayer;
using SqlDatabaseVectorSearch.Models;
namespace SqlDatabaseVectorSearch.Services;
public class DocumentService(ApplicationDbContext dbContext)
{
public async Task<IEnumerable<Document>> GetAsync(CancellationToken cancellationToken = default)
{
var documents = await dbContext.Documents.OrderBy(d => d.Name)
.Select(d => new Document(d.Id, d.Name, d.CreationDate, d.Chunks.Count))
.ToListAsync(cancellationToken);
return documents;
}
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)
.Select(c => new DocumentChunk(c.Id, c.Index, c.Content, null))
.ToListAsync(cancellationToken);
return documentChunks;
}
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)
.Select(c => new DocumentChunk(c.Id, c.Index, c.Content, c.Embedding))
.FirstOrDefaultAsync(cancellationToken);
return documentChunk;
}
public Task DeleteAsync(Guid documentId, CancellationToken cancellationToken = default)
=> dbContext.Documents.Where(d => d.Id == documentId).ExecuteDeleteAsync(cancellationToken);
public Task DeleteAsync(IEnumerable<Guid> documentIds, CancellationToken cancellationToken = default)
=> dbContext.Documents.Where(d => documentIds.Contains(d.Id)).ExecuteDeleteAsync(cancellationToken);
}