144 lines
5.5 KiB
C#
144 lines
5.5 KiB
C#
using ChatRAG.Models;
|
|
|
|
namespace ChatRAG.Services.Contracts
|
|
{
|
|
/// <summary>
|
|
/// Interface unificada para operações de documentos de texto.
|
|
/// Permite alternar entre MongoDB, Qdrant, ou outros providers sem quebrar código.
|
|
/// </summary>
|
|
public interface ITextDataService
|
|
{
|
|
// ========================================
|
|
// MÉTODOS ORIGINAIS (compatibilidade com TextData.cs atual)
|
|
// ========================================
|
|
|
|
/// <summary>
|
|
/// Salva texto no banco (método original do seu TextData.cs)
|
|
/// </summary>
|
|
/// <param name="titulo">Título do documento</param>
|
|
/// <param name="texto">Conteúdo do documento</param>
|
|
/// <param name="projectId">ID do projeto</param>
|
|
Task SalvarNoMongoDB(string titulo, string texto, string projectId);
|
|
|
|
/// <summary>
|
|
/// Salva ou atualiza texto com ID específico (método original)
|
|
/// </summary>
|
|
/// <param name="id">ID do documento (null para criar novo)</param>
|
|
/// <param name="titulo">Título do documento</param>
|
|
/// <param name="texto">Conteúdo do documento</param>
|
|
/// <param name="projectId">ID do projeto</param>
|
|
Task SalvarNoMongoDB(string? id, string titulo, string texto, string projectId);
|
|
|
|
/// <summary>
|
|
/// Processa texto completo dividindo por seções (método original)
|
|
/// </summary>
|
|
/// <param name="textoCompleto">Texto com divisões marcadas por **</param>
|
|
/// <param name="projectId">ID do projeto</param>
|
|
Task SalvarTextoComEmbeddingNoMongoDB(string textoCompleto, string projectId);
|
|
|
|
/// <summary>
|
|
/// Recupera todos os documentos (método original)
|
|
/// </summary>
|
|
/// <returns>Lista de todos os documentos</returns>
|
|
Task<IEnumerable<TextoComEmbedding>> GetAll();
|
|
|
|
/// <summary>
|
|
/// Recupera documentos por projeto (método original)
|
|
/// </summary>
|
|
/// <param name="projectId">ID do projeto</param>
|
|
/// <returns>Lista de documentos do projeto</returns>
|
|
Task<IEnumerable<TextoComEmbedding>> GetByPorjectId(string projectId);
|
|
|
|
/// <summary>
|
|
/// Recupera documento por ID (método original)
|
|
/// </summary>
|
|
/// <param name="id">ID do documento</param>
|
|
/// <returns>Documento ou null se não encontrado</returns>
|
|
Task<TextoComEmbedding> GetById(string id);
|
|
|
|
// ========================================
|
|
// MÉTODOS NOVOS (interface moderna e unificada)
|
|
// ========================================
|
|
|
|
/// <summary>
|
|
/// Salva documento usando modelo unificado
|
|
/// </summary>
|
|
/// <param name="document">Dados do documento</param>
|
|
/// <returns>ID do documento criado</returns>
|
|
Task<string> SaveDocumentAsync(DocumentInput document);
|
|
|
|
/// <summary>
|
|
/// Atualiza documento existente
|
|
/// </summary>
|
|
/// <param name="id">ID do documento</param>
|
|
/// <param name="document">Novos dados do documento</param>
|
|
Task UpdateDocumentAsync(string id, DocumentInput document);
|
|
|
|
/// <summary>
|
|
/// Remove documento
|
|
/// </summary>
|
|
/// <param name="id">ID do documento</param>
|
|
Task DeleteDocumentAsync(string id);
|
|
|
|
/// <summary>
|
|
/// Verifica se documento existe
|
|
/// </summary>
|
|
/// <param name="id">ID do documento</param>
|
|
/// <returns>True se existe, False caso contrário</returns>
|
|
Task<bool> DocumentExistsAsync(string id);
|
|
|
|
/// <summary>
|
|
/// Recupera documento por ID (formato moderno)
|
|
/// </summary>
|
|
/// <param name="id">ID do documento</param>
|
|
/// <returns>Documento ou null se não encontrado</returns>
|
|
Task<DocumentOutput?> GetDocumentAsync(string id);
|
|
|
|
/// <summary>
|
|
/// Lista documentos por projeto (formato moderno)
|
|
/// </summary>
|
|
/// <param name="projectId">ID do projeto</param>
|
|
/// <returns>Lista de documentos do projeto</returns>
|
|
Task<List<DocumentOutput>> GetDocumentsByProjectAsync(string projectId);
|
|
|
|
/// <summary>
|
|
/// Conta documentos
|
|
/// </summary>
|
|
/// <param name="projectId">Filtrar por projeto (opcional)</param>
|
|
/// <returns>Número de documentos</returns>
|
|
Task<int> GetDocumentCountAsync(string? projectId = null);
|
|
|
|
// ========================================
|
|
// OPERAÇÕES EM LOTE
|
|
// ========================================
|
|
|
|
/// <summary>
|
|
/// Salva múltiplos documentos de uma vez
|
|
/// </summary>
|
|
/// <param name="documents">Lista de documentos</param>
|
|
/// <returns>Lista de IDs dos documentos criados</returns>
|
|
Task<List<string>> SaveDocumentsBatchAsync(List<DocumentInput> documents);
|
|
|
|
/// <summary>
|
|
/// Remove múltiplos documentos de uma vez
|
|
/// </summary>
|
|
/// <param name="ids">Lista de IDs para remover</param>
|
|
Task DeleteDocumentsBatchAsync(List<string> ids);
|
|
|
|
// ========================================
|
|
// INFORMAÇÕES DO PROVIDER
|
|
// ========================================
|
|
|
|
/// <summary>
|
|
/// Nome do provider (MongoDB, Qdrant, etc.)
|
|
/// </summary>
|
|
string ProviderName { get; }
|
|
|
|
/// <summary>
|
|
/// Estatísticas e métricas do provider
|
|
/// </summary>
|
|
/// <returns>Informações sobre performance, saúde, etc.</returns>
|
|
Task<Dictionary<string, object>> GetProviderStatsAsync();
|
|
}
|
|
}
|