DB-Provisioning-Skripte (Drop-Alt-Tabellen + EF-Migrationen anwenden)

- scripts/drop-app-tables.sql: entfernt alte (snake_case) core_/ct_-Tabellen + EF-Historie,
  damit die EF-Migrationen kollisionsfrei angewendet werden koennen
- scripts/provision-db.ps1: liest Connection aus appsettings.Local.json, setzt IBKRTRADER_MYSQL,
  wendet CoreDbContext- + CongressTradingDbContext-Migrationen an (dotnet ef database update)
- scripts/README.md: Ablauf + Sicherheitshinweise (Passwort rotieren, Master-Key)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@
This commit is contained in:
Richard
2026-07-29 09:47:06 +02:00
parent e6bffdb70d
commit c5ff4e17aa
3 changed files with 114 additions and 0 deletions
+48
View File
@@ -0,0 +1,48 @@
<#
IBKRTrader DB-Provisioning.
Wendet die EF-Core-Migrationen beider Contexts (Core + CongressTrading) auf die Ziel-DB an.
Der Connection-String wird aus appsettings.Local.json gelesen und als Umgebungsvariable
IBKRTRADER_MYSQL an die Design-Time-Factories weitergereicht.
WICHTIG: Falls von frueheren Laeufen noch alte (snake_case) Tabellen in der DB liegen, vorher
einmalig scripts/drop-app-tables.sql ausfuehren sonst schlaegt 'database update' fehl
(Table already exists).
Aufruf (aus dem Projekt-Root):
powershell -ExecutionPolicy Bypass -File scripts/provision-db.ps1
#>
$ErrorActionPreference = 'Stop'
$root = Split-Path -Parent $PSScriptRoot
# 1. Connection-String aus appsettings.Local.json lesen.
$localPath = Join-Path $root 'appsettings.Local.json'
if (-not (Test-Path $localPath)) {
Write-Error "appsettings.Local.json nicht gefunden ($localPath). Datei mit Database:MySqlConnectionString anlegen."
exit 1
}
$conn = (Get-Content $localPath -Raw | ConvertFrom-Json).Database.MySqlConnectionString
if ([string]::IsNullOrWhiteSpace($conn)) {
Write-Error "Database:MySqlConnectionString in appsettings.Local.json ist leer."
exit 1
}
$env:IBKRTRADER_MYSQL = $conn
Write-Host "Connection aus appsettings.Local.json geladen." -ForegroundColor Green
# 2. dotnet-ef vorhanden?
try { dotnet ef --version | Out-Null } catch {
Write-Error "dotnet-ef fehlt. Installieren mit: dotnet tool install --global dotnet-ef"
exit 1
}
# 3. Migrationen anwenden Core, dann Modul.
Write-Host "Wende CoreDbContext-Migrationen an..." -ForegroundColor Cyan
dotnet ef database update --project src/IBKRTrader.Core --startup-project src/IBKRTrader.Core --context CoreDbContext
if ($LASTEXITCODE -ne 0) { Write-Error "CoreDbContext-Migration fehlgeschlagen."; exit 1 }
Write-Host "Wende CongressTradingDbContext-Migrationen an..." -ForegroundColor Cyan
dotnet ef database update --project src/IBKRTrader.Modules.CongressTrading --startup-project src/IBKRTrader.Modules.CongressTrading --context CongressTradingDbContext
if ($LASTEXITCODE -ne 0) { Write-Error "CongressTradingDbContext-Migration fehlgeschlagen."; exit 1 }
Write-Host "DB-Provisioning abgeschlossen." -ForegroundColor Green