67 lines
1.9 KiB
C#
67 lines
1.9 KiB
C#
using DbUp;
|
|
using DbUp.Engine.Output;
|
|
using Groceries.Data;
|
|
using Microsoft.AspNetCore.DataProtection;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
var builder = WebApplication.CreateBuilder(args);
|
|
var env = builder.Environment;
|
|
|
|
var dataDir = builder.Configuration["data"] ?? env.ContentRootPath;
|
|
|
|
builder.Configuration
|
|
.AddIniFile(Path.Combine(dataDir, "config.ini"), optional: true, reloadOnChange: true)
|
|
.AddIniFile(Path.Combine(dataDir, $"config_{env.EnvironmentName}.ini"), optional: true, reloadOnChange: true);
|
|
|
|
var dbConn = builder.Configuration["Database"]!;
|
|
|
|
var dataProtection = builder.Services.AddDataProtection();
|
|
if (env.IsProduction())
|
|
{
|
|
dataProtection.PersistKeysToFileSystem(new DirectoryInfo(Path.Combine(dataDir, "keys")));
|
|
}
|
|
|
|
builder.Services
|
|
.AddControllers()
|
|
.AddSessionStateTempDataProvider();
|
|
|
|
builder.Services.AddDistributedMemoryCache();
|
|
builder.Services.AddHttpContextAccessor();
|
|
builder.Services.AddSession();
|
|
|
|
builder.Services.AddPooledDbContextFactory<AppDbContext>(options => options
|
|
.EnableDetailedErrors(env.IsDevelopment())
|
|
.EnableSensitiveDataLogging(env.IsDevelopment())
|
|
.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking)
|
|
.UseSnakeCaseNamingConvention()
|
|
.UseNpgsql(dbConn));
|
|
|
|
var app = builder.Build();
|
|
|
|
app.UseRouting();
|
|
app.UseSession();
|
|
|
|
app.MapStaticAssets();
|
|
app.MapControllers()
|
|
.WithStaticAssets();
|
|
|
|
var dbUpgradeLogger = new MicrosoftUpgradeLog(app.Logger);
|
|
EnsureDatabase.For.PostgresqlDatabase(dbConn, dbUpgradeLogger);
|
|
|
|
var dbUpgradeResult = DeployChanges.To
|
|
.PostgresqlDatabase(dbConn)
|
|
.JournalToPostgresqlTable("public", "__dbup_migrations")
|
|
.WithScriptsEmbeddedInAssembly(typeof(AppDbContext).Assembly)
|
|
.WithTransactionPerScript()
|
|
.LogTo(dbUpgradeLogger)
|
|
.Build()
|
|
.PerformUpgrade();
|
|
|
|
if (!dbUpgradeResult.Successful)
|
|
{
|
|
Environment.Exit(-1);
|
|
return;
|
|
}
|
|
|
|
app.Run();
|