logging, environment und Datenbank connection

This commit is contained in:
2025-08-11 07:46:53 +02:00
parent 8874084a07
commit 4df7376e33
9 changed files with 315 additions and 71 deletions
+12 -5
View File
@@ -40,11 +40,18 @@ var (
)
func ConnectDatabase() *gorm.DB {
// Konfiguration laden um zu entscheiden, welche Datenbank verwendet werden soll
cfg := config.LoadConfig()
// Verwende die globale Konfigurationsvariable
cfg := config.Cfg
logger.Debug("Datenbankverbindung - Environment: '%s', DevTesting: '%s'", cfg.Environment, cfg.DevTesting)
// Debug: Explizite Bedingungsauswertung
envIsTest := cfg.Environment == "test"
devTestingIsYes := cfg.DevTesting == "yes"
logger.Debug("Bedingungsauswertung - Environment == 'test': %v, DevTesting == 'yes': %v", envIsTest, devTestingIsYes)
// In Test-Umgebung verwende Test-DB, sonst die konfigurierte Datenbank
if cfg.Environment == "test" || cfg.Testing == "yes" {
if envIsTest || devTestingIsYes {
logger.Debug("Test-Umgebung erkannt, verwende Test-Datenbank")
SetupTestDB()
} else {
@@ -55,8 +62,8 @@ func ConnectDatabase() *gorm.DB {
return DB
}
func ConnectDatabaseOrig() *gorm.DB {
// Konfiguration laden
cfg := config.LoadConfig()
// Verwende die globale Konfigurationsvariable
cfg := config.Cfg
logger.Debug("Datenbank-Konfiguration geladen: Type=%s, URL=%s", cfg.DatabaseType, cfg.DatabaseURL)
+62 -3
View File
@@ -1,6 +1,7 @@
package database
import (
"bamort/logger"
"io"
"os"
"path/filepath"
@@ -14,19 +15,29 @@ var testdbTempDir string
// copyFile copies a file from src to dst
func copyFile(src, dst string) error {
logger.Debug("copyFile: Kopiere Datei von %s nach %s", src, dst)
sourceFile, err := os.Open(src)
if err != nil {
logger.Error("copyFile: Fehler beim Öffnen der Quelldatei %s: %s", src, err.Error())
return err
}
defer sourceFile.Close()
destFile, err := os.Create(dst)
if err != nil {
logger.Error("copyFile: Fehler beim Erstellen der Zieldatei %s: %s", dst, err.Error())
return err
}
defer destFile.Close()
_, err = io.Copy(destFile, sourceFile)
copied, err := io.Copy(destFile, sourceFile)
if err != nil {
logger.Error("copyFile: Fehler beim Kopieren der Datei: %s", err.Error())
return err
}
logger.Debug("copyFile: Erfolgreich %d Bytes kopiert von %s nach %s", copied, src, dst)
return err
}
@@ -38,47 +49,95 @@ func copyFile(src, dst string) error {
// Parameters:
// - opts[0]: isTestDb (bool) - whether to use precopied SQLite (true) or persistent (Live) MariaDB (false)
func SetupTestDB(opts ...bool) {
logger.Debug("SetupTestDB aufgerufen")
isTestDb = true
if len(opts) > 0 {
isTestDb = opts[0]
logger.Debug("SetupTestDB: isTestDb Parameter überschrieben auf %t", isTestDb)
}
logger.Debug("SetupTestDB: Verwende Test-Datenbank: %t", isTestDb)
if DB == nil {
logger.Debug("SetupTestDB: DB ist nil, erstelle neue Datenbankverbindung")
var db *gorm.DB
if isTestDb {
logger.Info("SetupTestDB: Erstelle SQLite Test-Datenbank")
testdbTempDir, err := os.MkdirTemp("", "bamort-test-")
if err != nil {
logger.Error("SetupTestDB: Fehler beim Erstellen des temporären Verzeichnisses: %s", err.Error())
panic("failed to create temporary directory: " + err.Error())
}
logger.Debug("SetupTestDB: Temporäres Verzeichnis erstellt: %s", testdbTempDir)
targetFile := filepath.Join(testdbTempDir, "test_backup.db")
logger.Debug("SetupTestDB: Ziel-Datei: %s", targetFile)
logger.Debug("SetupTestDB: Quelle-Datei: %s", PreparedTestDB)
err = copyFile(PreparedTestDB, targetFile)
if err != nil {
logger.Error("SetupTestDB: Fehler beim Kopieren der Test-Datenbank: %s", err.Error())
panic("failed to copy prepared test database: " + err.Error())
}
logger.Info("SetupTestDB: Test-Datenbank erfolgreich kopiert")
db, err = gorm.Open(sqlite.Open(targetFile), &gorm.Config{})
if err != nil {
logger.Error("SetupTestDB: Fehler beim Verbinden mit der Test-Datenbank: %s", err.Error())
panic("failed to connect to the test database: " + err.Error())
}
logger.Info("SetupTestDB: Erfolgreich mit SQLite Test-Datenbank verbunden")
//defer os.RemoveAll(testdbTempDir)
} else {
logger.Info("SetupTestDB: Verwende Live-Datenbank (MariaDB)")
//* //testing with persistent MariaDB
db = ConnectDatabase()
if db == nil {
logger.Error("SetupTestDB: Fehler beim Verbinden mit der Live-Datenbank")
panic("failed to connect to the live database")
}
logger.Info("SetupTestDB: Erfolgreich mit Live-Datenbank verbunden")
}
DB = db
logger.Info("SetupTestDB: Datenbankverbindung erfolgreich eingerichtet")
} else {
logger.Debug("SetupTestDB: DB bereits initialisiert, überspringe Setup")
}
}
func ResetTestDB() {
logger.Debug("ResetTestDB aufgerufen")
if isTestDb {
logger.Debug("ResetTestDB: Verwende Test-Datenbank, führe Cleanup durch")
sqlDB, err := DB.DB()
if err == nil {
logger.Debug("ResetTestDB: Schließe Datenbankverbindung")
sqlDB.Close()
DB = nil
os.RemoveAll(testdbTempDir)
logger.Debug("ResetTestDB: DB auf nil gesetzt")
if testdbTempDir != "" {
logger.Debug("ResetTestDB: Lösche temporäres Verzeichnis: %s", testdbTempDir)
err = os.RemoveAll(testdbTempDir)
if err != nil {
logger.Error("ResetTestDB: Fehler beim Löschen des temporären Verzeichnisses: %s", err.Error())
} else {
logger.Info("ResetTestDB: Temporäres Verzeichnis erfolgreich gelöscht")
}
testdbTempDir = ""
}
} else {
logger.Error("ResetTestDB: Fehler beim Abrufen der SQL-Datenbank: %s", err.Error())
}
} else {
logger.Debug("ResetTestDB: Verwende Live-Datenbank, überspringe Cleanup")
}
logger.Info("ResetTestDB: Cleanup abgeschlossen")
}