ChatRAG/Services/Contracts/ITextDataService.cs
2025-06-15 21:34:47 -03:00

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();
}
}