package main import ( "fmt" "log" "os" "github.com/timetracker/backend/internal/models" "gorm.io/gorm/logger" ) func main() { // Parse command line flags verbose := false for _, arg := range os.Args[1:] { if arg == "--verbose" || arg == "-v" { verbose = true } } if verbose { fmt.Println("Running in verbose mode") } // Get database configuration with sensible defaults dbConfig := models.DefaultDatabaseConfig() // Override with environment variables if provided if host := os.Getenv("DB_HOST"); host != "" { dbConfig.Host = host } if port := os.Getenv("DB_PORT"); port != "" { var portInt int if _, err := fmt.Sscanf(port, "%d", &portInt); err == nil && portInt > 0 { dbConfig.Port = portInt } } if user := os.Getenv("DB_USER"); user != "" { dbConfig.User = user } if password := os.Getenv("DB_PASSWORD"); password != "" { dbConfig.Password = password } if dbName := os.Getenv("DB_NAME"); dbName != "" { dbConfig.DBName = dbName } if sslMode := os.Getenv("DB_SSLMODE"); sslMode != "" { dbConfig.SSLMode = sslMode } // Set log level dbConfig.LogLevel = logger.Info // Initialize database fmt.Println("Connecting to database...") if err := models.InitDB(dbConfig); err != nil { log.Fatalf("Error initializing database: %v", err) } defer func() { if err := models.CloseDB(); err != nil { log.Printf("Error closing database connection: %v", err) } }() fmt.Println("✓ Database connection successful") // Run migrations fmt.Println("Running database migrations...") if err := models.MigrateDB(); err != nil { log.Fatalf("Error migrating database: %v", err) } fmt.Println("✓ Database migrations completed successfully") }