using Application.Services.Database; using Application.Services.Database.MongoDB; using Application.Services.HashingAlgorithms; using Application.Services.Jwt; 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 services services.AddSingleton(serviceProvider => { var configuration = serviceProvider.GetRequiredService(); var connectionString = configuration.GetConnectionString("MongoDBConnection"); var databaseName = configuration["HealthcareManagerDatabase:Name"]; var collectionName = configuration["HealthcareManagerDatabase:MedicalRecordCollectionName"]; return new MedicalHistoryMongoDbService(connectionString, databaseName, collectionName); }); services.AddSingleton(serviceProvider => { var configuration = serviceProvider.GetRequiredService(); var connectionString = configuration.GetConnectionString("MongoDBConnection"); var databaseName = configuration["HealthcareManagerDatabase:Name"]; var collectionName = configuration["HealthcareManagerDatabase:ChatCollectionName"]; return new ChatMongoDbService(connectionString, databaseName, collectionName); }); // Other Services services.AddScoped(); services.AddSingleton(serviceProvider => { var configuration = serviceProvider.GetRequiredService(); return new JwtService(configuration); }); // services.AddScoped(); return services; } private static string ExtractMongoDbDatabaseName(string connectionString) { var connectionStringBuilder = new MongoUrlBuilder(connectionString); return connectionStringBuilder.DatabaseName; } }