fix: Neue Datenbank anlegen ohne geladene Konfiguration ermoeglichen

Ohne Override und ohne geladene Konfiguration lieferte der aktive-DB-Supplier
faelschlich den Zielpfad selbst zurueck, wodurch die Selbst-Ueberschreib-Pruefung
immer ansprach und jede Anlage mit "Zielpfad ist die aktuell aktive
Datenbankdatei" abgelehnt wurde.

Der Supplier signalisiert "keine aktive Datenbank" nun mit null; der Use-Case
ueberspringt in diesem Fall die Pruefung und laesst die Anlage zu.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-01 14:26:24 +02:00
parent 94b00e69da
commit 3da2bcc561
3 changed files with 96 additions and 28 deletions
@@ -2042,6 +2042,9 @@ public class BootstrapRunner {
* {@link #activeDatabaseContext}. Die zugrundeliegende Liefer-Lambda für den aktiven
* DB-Pfad bevorzugt das Override im Kontext-Port; ist keines gesetzt, fällt sie auf den
* {@code sqliteFile}-Wert der aus {@code configFilePath} geladenen Konfiguration zurück.
* Existiert weder ein Override noch eine ladbare Konfiguration, gibt es keine aktive
* Datenbank: die Lambda liefert dann {@code null}, wodurch der Use-Case die
* Selbst-Überschreib-Prüfung überspringt und die Anlage zulässt.
* <p>
* Pfad-Validierungs- und Move-Schritte verbleiben im Use-Case; der Adapter führt
* Anlage, Migration und Verbindungstest aus.
@@ -2061,9 +2064,10 @@ public class BootstrapRunner {
return override.get();
}
if (configFilePath == null || !Files.exists(configFilePath)) {
// Ohne Konfiguration und ohne Override: Zielpfad selbst als „aktiv" werten,
// damit die Pfadprüfung nur das Selbst-Überschreiben verhindert.
return targetFile.toAbsolutePath().normalize();
// Ohne Override und ohne geladene Konfiguration existiert keine aktive
// Datenbank. null signalisiert dem Use-Case: keine Selbst-Überschreib-Prüfung
// nötig, die Anlage darf fortfahren.
return null;
}
try {
migrateConfigurationIfNeeded(configFilePath);
@@ -2071,9 +2075,9 @@ public class BootstrapRunner {
return config.sqliteFile().toAbsolutePath().normalize();
} catch (Exception e) {
LOG.warn("GUI-Datenbankanlage: aktive DB konnte nicht aus {} ermittelt werden: {} — "
+ "Zielpfad wird stattdessen als aktiv angenommen.",
+ "es wird keine aktive DB angenommen.",
configFilePath, e.getMessage());
return targetFile.toAbsolutePath().normalize();
return null;
}
};
DefaultCreateNewDatabaseUseCase useCase = new DefaultCreateNewDatabaseUseCase(