@
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:
@@ -0,0 +1,32 @@
|
|||||||
|
# IBKRTrader – DB-Provisioning
|
||||||
|
|
||||||
|
Die App legt das DB-Schema **nicht** zur Laufzeit an (EF-Migrationen werden extern angewendet).
|
||||||
|
Einmalig beim Aufsetzen einer DB:
|
||||||
|
|
||||||
|
## 1. (Nur falls nötig) Alt-Tabellen entfernen
|
||||||
|
Wenn frühere Läufe bereits `core_*`/`ct_*`-Tabellen im alten (snake_case) Schema angelegt haben,
|
||||||
|
kollidieren sie mit dem EF-Schema. Dann einmalig ausführen:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mysql -h <host> -u <user> -p <db> < scripts/drop-app-tables.sql
|
||||||
|
```
|
||||||
|
|
||||||
|
> ⚠️ Löscht Daten in diesen Tabellen. Bei frischem Aufsetzen unkritisch.
|
||||||
|
|
||||||
|
## 2. Migrationen anwenden
|
||||||
|
Liest den Connection-String aus `appsettings.Local.json` und wendet beide Contexts an:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
powershell -ExecutionPolicy Bypass -File scripts/provision-db.ps1
|
||||||
|
```
|
||||||
|
|
||||||
|
Voraussetzung: `dotnet-ef` (`dotnet tool install --global dotnet-ef`).
|
||||||
|
|
||||||
|
Angelegt werden: `core_position`, `core_trade_history`, `core_budget`, `core_worker_log`,
|
||||||
|
`core_settings`, `core_ibkr_instruments`, `core_ibkr_market_data`, `core_ibkr_external_identifiers`,
|
||||||
|
`ct_congressMember`, `ct_trade` sowie `__EFMigrationsHistory`.
|
||||||
|
|
||||||
|
## Sicherheit
|
||||||
|
- **DB-Passwort rotieren** – das ursprüngliche liegt in der Git-Historie (Commit `ebeb035`).
|
||||||
|
- Optional Master-Key setzen (`IBKRTRADER_MASTER_KEY` oder Datei `master.key`) für die
|
||||||
|
at-rest-Verschlüsselung künftiger Credentials.
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
-- IBKRTrader – Alt-Tabellen entfernen, damit die EF-Migrationen sauber angewendet werden können.
|
||||||
|
--
|
||||||
|
-- Hintergrund: Frühere Läufe legten die Tabellen per Dapper (snake_case-Spalten) an. Das EF-Schema
|
||||||
|
-- nutzt dieselben Tabellennamen, aber PascalCase-Spalten – deshalb müssen die alten Tabellen weg,
|
||||||
|
-- bevor `dotnet ef database update` sie neu (EF-konform) anlegt.
|
||||||
|
--
|
||||||
|
-- WARNUNG: Löscht alle Daten in diesen Tabellen. Nur ausführen, wenn kein produktiver Datenbestand
|
||||||
|
-- drin ist (bei einem frisch aufgesetzten IBKRTrader ist das der Fall).
|
||||||
|
--
|
||||||
|
-- Anwenden gegen die Ziel-DB (bergisnu_db0), z. B.:
|
||||||
|
-- mysql -h <host> -u <user> -p <db> < scripts/drop-app-tables.sql
|
||||||
|
|
||||||
|
SET FOREIGN_KEY_CHECKS = 0;
|
||||||
|
|
||||||
|
-- Core
|
||||||
|
DROP TABLE IF EXISTS `core_position`;
|
||||||
|
DROP TABLE IF EXISTS `core_trade_history`;
|
||||||
|
DROP TABLE IF EXISTS `core_budget`;
|
||||||
|
DROP TABLE IF EXISTS `core_worker_log`;
|
||||||
|
DROP TABLE IF EXISTS `core_settings`;
|
||||||
|
|
||||||
|
-- Core / IBKR-Marktdaten
|
||||||
|
DROP TABLE IF EXISTS `core_ibkr_market_data`;
|
||||||
|
DROP TABLE IF EXISTS `core_ibkr_external_identifiers`;
|
||||||
|
DROP TABLE IF EXISTS `core_ibkr_instruments`;
|
||||||
|
|
||||||
|
-- Modul CongressTrading
|
||||||
|
DROP TABLE IF EXISTS `ct_trade`;
|
||||||
|
DROP TABLE IF EXISTS `ct_congressMember`;
|
||||||
|
|
||||||
|
-- EF-Migrationshistorie (beide Contexts teilen sich diese Tabelle) zurücksetzen
|
||||||
|
DROP TABLE IF EXISTS `__EFMigrationsHistory`;
|
||||||
|
|
||||||
|
SET FOREIGN_KEY_CHECKS = 1;
|
||||||
@@ -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
|
||||||
Reference in New Issue
Block a user