Files
2024-05-30 15:40:13 +03:00

82 lines
3.6 KiB
C#

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<HealthcareManagerDatabase>(options =>
options.UseNpgsql(configuration.GetConnectionString("HealthcareManagerDatabase")));
//PostgreSQL Services
services.AddScoped<IPatientRepository, PatientRepository>();
services.AddScoped<IDoctorRepository, DoctorRepository>();
services.AddScoped<IMedicalHistoryRepository, MedicalHistoryRepository>();
services.AddScoped<IAdminRepository, AdminRepository>();
// MongoDB services
services.AddSingleton<IMedicalHistoryMongoDbService>(serviceProvider =>
{
var configuration = serviceProvider.GetRequiredService<IConfiguration>();
var connectionString = configuration.GetConnectionString("MongoDBConnection");
var databaseName = configuration["HealthcareManagerDatabase:Name"];
var collectionName = configuration["HealthcareManagerDatabase:MedicalRecordCollectionName"];
return new MedicalHistoryMongoDbService(connectionString, databaseName, collectionName);
});
services.AddSingleton<IChatMongoDbService>(serviceProvider =>
{
var configuration = serviceProvider.GetRequiredService<IConfiguration>();
var connectionString = configuration.GetConnectionString("MongoDBConnection");
var databaseName = configuration["HealthcareManagerDatabase:Name"];
var collectionName = configuration["HealthcareManagerDatabase:ChatCollectionName"];
return new ChatMongoDbService(connectionString, databaseName, collectionName);
});
services.AddSingleton<IAppointmentsMongoDbService>(serviceProvider =>
{
var configuration = serviceProvider.GetRequiredService<IConfiguration>();
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<IEncryptionService, EncryptionService>(serviceProvider =>
{
var configuration = serviceProvider.GetRequiredService<IConfiguration>();
return new EncryptionService(configuration);
});
services.AddSingleton<IJwtService, JwtService>(serviceProvider =>
{
var configuration = serviceProvider.GetRequiredService<IConfiguration>();
return new JwtService(configuration);
});
services.Configure<SmtpSettings>(configuration.GetSection("SmtpSettings"));
services.AddScoped<IEmailService, EmailService>();
services.AddHostedService<AppointmentCleanupService>();
return services;
}
}