diff --git a/src/ErateWorkbench.Api/ErateWorkbench.Api.csproj b/src/ErateWorkbench.Api/ErateWorkbench.Api.csproj
index 2a7e6fc..02ca720 100644
--- a/src/ErateWorkbench.Api/ErateWorkbench.Api.csproj
+++ b/src/ErateWorkbench.Api/ErateWorkbench.Api.csproj
@@ -20,6 +20,7 @@
runtime; build; native; contentfiles; analyzers; buildtransitive
all
+
diff --git a/src/ErateWorkbench.Api/Program.cs b/src/ErateWorkbench.Api/Program.cs
index a2ec96b..15e7c49 100644
--- a/src/ErateWorkbench.Api/Program.cs
+++ b/src/ErateWorkbench.Api/Program.cs
@@ -29,11 +29,23 @@
includeControllerXmlComments: true);
});
-var connectionString = builder.Configuration.GetConnectionString("DefaultConnection")
- ?? "Data Source=erate-workbench.db";
+var dbProvider = builder.Configuration["DatabaseProvider"] ?? "Sqlite";
builder.Services.AddDbContext(options =>
- options.UseSqlite(connectionString));
+{
+ if (dbProvider.Equals("Postgres", StringComparison.OrdinalIgnoreCase))
+ {
+ var pgConn = builder.Configuration.GetConnectionString("Postgres")
+ ?? throw new InvalidOperationException("ConnectionStrings:Postgres is required when DatabaseProvider=Postgres");
+ options.UseNpgsql(pgConn);
+ }
+ else
+ {
+ var sqliteConn = builder.Configuration.GetConnectionString("DefaultConnection")
+ ?? "Data Source=erate-workbench.db";
+ options.UseSqlite(sqliteConn);
+ }
+});
builder.Services.AddHttpClient();
builder.Services.AddScoped();
@@ -91,11 +103,17 @@
app.UseHttpsRedirection();
-// Apply migrations on startup
+// Apply migrations on startup (SQLite) or create schema (Postgres)
using (var scope = app.Services.CreateScope())
{
var dbContext = scope.ServiceProvider.GetRequiredService();
- dbContext.Database.Migrate();
+ var startupLogger = scope.ServiceProvider.GetRequiredService>();
+ startupLogger.LogInformation("Database provider: {Provider}", dbProvider);
+
+ if (dbProvider.Equals("Postgres", StringComparison.OrdinalIgnoreCase))
+ dbContext.Database.EnsureCreated();
+ else
+ dbContext.Database.Migrate();
}
// --- Health ---
diff --git a/src/ErateWorkbench.Api/appsettings.json b/src/ErateWorkbench.Api/appsettings.json
index 1cfdf8e..443a767 100644
--- a/src/ErateWorkbench.Api/appsettings.json
+++ b/src/ErateWorkbench.Api/appsettings.json
@@ -9,7 +9,9 @@
}
},
"AllowedHosts": "*",
+ "DatabaseProvider": "Sqlite",
"ConnectionStrings": {
- "DefaultConnection": "Data Source=erate-workbench.db"
+ "DefaultConnection": "Data Source=erate-workbench.db",
+ "Postgres": "Host=localhost;Port=5432;Database=eratedb;Username=erate;Password=erate"
}
}