using Application.Services.Database.MongoDB; using Application.Services.Database.PostgreSQL; using Application.Services.Email; using Application.Services.Encryption; using Application.Services.Jwt; using Infrastructure.BackgroundServices; using Infrastructure.Services.Authentication; using Infrastructure.Services.Email; using Infrastructure.Services.Encryption; using Infrastructure.Services.MongoDB; using Infrastructure.Services.PostgreSQL; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; 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(); 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); }); services.AddSingleton(serviceProvider => { var configuration = serviceProvider.GetRequiredService(); var connectionString = configuration.GetConnectionString("MongoDBConnection"); var databaseName = configuration["HealthcareManagerDatabase:Name"]; var collectionName = configuration["HealthcareManagerDatabase:AppointmentsCollectionName"]; return new AppointmentsMongoDbService(connectionString, databaseName, collectionName); }); // Other Services services.AddSingleton(serviceProvider => { var configuration = serviceProvider.GetRequiredService(); return new EncryptionService(configuration); }); services.AddSingleton(serviceProvider => { var configuration = serviceProvider.GetRequiredService(); return new JwtService(configuration); }); services.Configure(configuration.GetSection("SmtpSettings")); services.AddScoped(); services.AddHostedService(); return services; } }