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