From 6bbc831ae05b2bed77f04c7ed4ee4f2207f2022e Mon Sep 17 00:00:00 2001 From: alireza Date: Fri, 9 Oct 2026 23:31:26 +0330 Subject: [PATCH] feat(infra): add PostgreSQL provider switch (soft migration, default SqlServer) + local postgres:17 service --- src/GreenHome.Api/appsettings.Development.json | 6 +++++- src/GreenHome.Api/docker-compose.yaml | 17 +++++++++++++++++ .../DependencyInjection.cs | 13 ++++++++++++- .../GreenHome.Infrastructure.csproj | 1 + 4 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/GreenHome.Api/appsettings.Development.json b/src/GreenHome.Api/appsettings.Development.json index b3c2afc..563bcb4 100644 --- a/src/GreenHome.Api/appsettings.Development.json +++ b/src/GreenHome.Api/appsettings.Development.json @@ -5,8 +5,12 @@ "Microsoft.AspNetCore": "Warning" } }, + "Database": { + "Provider": "SqlServer" + }, "ConnectionStrings": { - "Default": "Server=.;Integrated Security=False;Trusted_Connection=True;Encrypt=false;MultipleActiveResultSets=true;Database=GreenHomeDb;" + "Default": "Server=.;Integrated Security=False;Trusted_Connection=True;Encrypt=false;MultipleActiveResultSets=true;Database=GreenHomeDb;", + "Postgres": "Host=localhost;Port=5432;Database=greenhome;Username=greenhome;Password=greenhome" }, "AvanakVoiceCall": { "Token": "A948B776B90CFD919B0EC60929714136CCB49DDB" diff --git a/src/GreenHome.Api/docker-compose.yaml b/src/GreenHome.Api/docker-compose.yaml index 3bae353..bbd31c2 100644 --- a/src/GreenHome.Api/docker-compose.yaml +++ b/src/GreenHome.Api/docker-compose.yaml @@ -33,7 +33,24 @@ services: networks: - greenNetwork + postgres: + image: postgres:17-alpine + restart: unless-stopped + environment: + POSTGRES_DB: greenhome + POSTGRES_USER: greenhome + POSTGRES_PASSWORD: greenhome + ports: + - "5432:5432" + volumes: + - pgdata:/var/lib/postgresql/data + networks: + - greenNetwork + networks: serviceNetwork: name: greenNetwork external: true + +volumes: + pgdata: diff --git a/src/GreenHome.Infrastructure/DependencyInjection.cs b/src/GreenHome.Infrastructure/DependencyInjection.cs index 048b369..36e3e74 100644 --- a/src/GreenHome.Infrastructure/DependencyInjection.cs +++ b/src/GreenHome.Infrastructure/DependencyInjection.cs @@ -13,6 +13,7 @@ using GreenHome.Infrastructure.Services.Telemetry; using GreenHome.Infrastructure.Services.Usage; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; +using Npgsql.EntityFrameworkCore.PostgreSQL; using Microsoft.Extensions.DependencyInjection; namespace GreenHome.Infrastructure; @@ -28,9 +29,19 @@ public static class DependencyInjection IConfiguration configuration) { // Entity Framework + // Provider is switchable via config ("Database:Provider" = "SqlServer" | "Postgres") + // to allow a soft migration: default stays SqlServer until cutover. + var provider = configuration["Database:Provider"] ?? "SqlServer"; services.AddDbContext(options => { - options.UseSqlServer(configuration.GetConnectionString("Default")); + if (provider == "Postgres") + { + options.UseNpgsql(configuration.GetConnectionString("Postgres")); + } + else + { + options.UseSqlServer(configuration.GetConnectionString("Default")); + } }); // Auth diff --git a/src/GreenHome.Infrastructure/GreenHome.Infrastructure.csproj b/src/GreenHome.Infrastructure/GreenHome.Infrastructure.csproj index 0c35c59..e409fc6 100644 --- a/src/GreenHome.Infrastructure/GreenHome.Infrastructure.csproj +++ b/src/GreenHome.Infrastructure/GreenHome.Infrastructure.csproj @@ -14,6 +14,7 @@ + all runtime; build; native; contentfiles; analyzers; buildtransitive