using ChatApi.Data; using ChatRAG.Contracts.VectorSearch; using ChatRAG.Data; using ChatRAG.Services; using ChatRAG.Services.Contracts; using ChatRAG.Services.ResponseService; using ChatRAG.Services.SearchVectors; using ChatRAG.Services.TextServices; using ChatRAG.Settings; using ChatRAG.Settings.ChatRAG.Configuration; using Microsoft.Extensions.Options; using Qdrant.Client; namespace ChatRAG.Extensions { public static class ServiceCollectionExtensions { /// /// Registra o sistema completo de Vector Database /// public static IServiceCollection AddVectorDatabase( this IServiceCollection services, IConfiguration configuration) { // Registra e valida configurações services.Configure( configuration.GetSection("VectorDatabase")); services.AddSingleton, ChatRAG.Settings.VectorDatabaseSettingsValidator>(); // Registra factory principal services.AddScoped(); // Registra implementações de todos os providers services.AddMongoDbProvider(); services.AddQdrantProvider(); // 👈 Agora ativo! // Registra interfaces principais usando factory services.AddScoped(provider => { var factory = provider.GetRequiredService(); return factory.CreateVectorSearchService(); }); services.AddScoped(provider => { var factory = provider.GetRequiredService(); return factory.CreateTextDataService(); }); services.AddScoped(provider => { var factory = provider.GetRequiredService(); return factory.CreateResponseService(); }); return services; } /// /// Registra implementações MongoDB (suas classes atuais) /// private static IServiceCollection AddMongoDbProvider(this IServiceCollection services) { services.AddScoped(); // Implementa ITextDataService services.AddScoped(); services.AddScoped(); // Implementa IResponseService services.AddScoped(); // Wrapper para IVectorSearchService return services; } /// /// Registra implementações Qdrant /// private static IServiceCollection AddQdrantProvider(this IServiceCollection services) { // ✅ Cliente Qdrant configurado services.AddScoped(provider => { var settings = provider.GetRequiredService>(); var qdrantSettings = settings.Value.Qdrant; return new QdrantClient( host: qdrantSettings.Host, port: qdrantSettings.Port, https: qdrantSettings.UseTls ); }); // ✅ Serviços Qdrant services.AddScoped(); services.AddScoped(); services.AddScoped(); return services; } } }