using Application.Services.Database; using Application.Services.Database.MongoDB; using Application.Services.HashingAlgorithms; using Infrastructure.Data; using Infrastructure.Services.HashingAlgorithms; using Infrastructure.Services.MongoDB; using Infrastructure.Services.PostgreSQL; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using MongoDB.Driver; namespace Infrastructure; public static class DependencyInjection { public static IServiceCollection AddInfrastructureServices(this IServiceCollection services, IConfiguration configuration) { services.AddDbContext(options => options.UseNpgsql(configuration.GetConnectionString("HealthcareManagerDatabase"))); //PostgreSQL Services services.AddScoped(); services.AddScoped(); services.AddScoped(); // MongoDB Service var mongoDbConnectionString = configuration.GetValue("ConnectionStrings:MongoDBConnection"); // Extract MongoDB database names var healthcareManagerDatabaseName = configuration.GetValue("HealthcareManagerDatabase:Name"); var medicalHistoryCollectionName = configuration.GetValue("HealthcareManagerDatabase:MedicalRecordCollectionName"); var chatCollectionName = configuration.GetValue("HealthcareManagerDatabase:ChatCollectionName"); // Register MongoDB services services.AddSingleton(serviceProvider => new MedicalHistoryMongoDbService(mongoDbConnectionString, healthcareManagerDatabaseName, medicalHistoryCollectionName)); services.AddSingleton(serviceProvider => new ChatMongoDbService(mongoDbConnectionString, healthcareManagerDatabaseName, chatCollectionName)); // Other Services services.AddScoped(); // services.AddScoped(); return services; } private static string ExtractMongoDbDatabaseName(string connectionString) { var connectionStringBuilder = new MongoUrlBuilder(connectionString); return connectionStringBuilder.DatabaseName; } }