a8bc26fe38
- Dedicated HrynCo.NotificationService.Migrator console app - Reads App:ConnectionString from config/env - Calls db.Database.MigrateAsync() with clear log output - Own Dockerfile (runtime:10.0 base, no SDK overhead) - Replaces SDK volume-mount approach in docker-compose - Added to solution with /docker/Migrator/ folder Ref: IT-628 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
47 lines
1.3 KiB
C#
47 lines
1.3 KiB
C#
using HrynCo.NotificationService.DAL.EF;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.Hosting;
|
|
using Serilog;
|
|
|
|
Log.Logger = new LoggerConfiguration()
|
|
.WriteTo.Console()
|
|
.CreateBootstrapLogger();
|
|
|
|
try
|
|
{
|
|
Log.Information("🚀 Notification Service Migrator starting...");
|
|
|
|
var host = Host.CreateDefaultBuilder(args)
|
|
.UseSerilog((ctx, cfg) => cfg
|
|
.ReadFrom.Configuration(ctx.Configuration)
|
|
.WriteTo.Console())
|
|
.ConfigureServices((ctx, services) =>
|
|
{
|
|
var connectionString = ctx.Configuration["App:ConnectionString"]
|
|
?? throw new InvalidOperationException("App:ConnectionString is not configured.");
|
|
|
|
services.AddDbContext<NotificationDbContext>(options =>
|
|
options.UseNpgsql(connectionString));
|
|
})
|
|
.Build();
|
|
|
|
using var scope = host.Services.CreateScope();
|
|
var db = scope.ServiceProvider.GetRequiredService<NotificationDbContext>();
|
|
|
|
Log.Information("Applying migrations...");
|
|
await db.Database.MigrateAsync();
|
|
Log.Information("Migrations applied successfully.");
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
Log.Fatal(ex, "Migration failed.");
|
|
return 1;
|
|
}
|
|
finally
|
|
{
|
|
await Log.CloseAndFlushAsync();
|
|
}
|
|
|
|
return 0;
|