Files
tankstopp-app/cmd/main.go
T
2025-07-07 01:44:12 +02:00

86 lines
2.2 KiB
Go

package main
import (
"log"
"net/http"
"tankstopp/internal/config"
"tankstopp/internal/database"
"tankstopp/internal/handlers"
"github.com/gorilla/mux"
)
func main() {
// Load configuration from file and environment variables
configPath := config.GetConfigFromEnv()
cfg, err := config.Load(configPath)
if err != nil {
log.Printf("Warning: Failed to load config file '%s': %v", configPath, err)
log.Println("Falling back to environment variables and defaults...")
// Fallback to environment-based configuration
db, err := database.NewDBFromEnv()
if err != nil {
log.Fatal("Failed to connect to database:", err)
}
defer db.Close()
log.Println("Database connection established with GORM (using environment config)")
// Initialize handlers
h := handlers.NewHandler(db)
// Create router
r := mux.NewRouter()
// Register all routes
h.RegisterRoutes(r)
// Start server with default settings
log.Println("Server starting on :8081")
log.Println("Visit http://localhost:8081 to access the application")
log.Fatal(http.ListenAndServe(":8081", r))
return
}
log.Printf("Loaded configuration from: %s", configPath)
log.Printf("Configuration: %s", cfg.String())
// Initialize database with Viper configuration
db, err := database.NewDBFromConfig(configPath)
if err != nil {
log.Fatal("Failed to connect to database:", err)
}
defer db.Close()
log.Println("Database connection established with GORM")
// Initialize handlers
h := handlers.NewHandler(db)
// Create router
r := mux.NewRouter()
// Register all routes
h.RegisterRoutes(r)
// Create server with configuration
server := &http.Server{
Addr: cfg.GetServerAddress(),
Handler: r,
ReadTimeout: cfg.Server.ReadTimeout,
WriteTimeout: cfg.Server.WriteTimeout,
IdleTimeout: cfg.Server.IdleTimeout,
}
// Start server
log.Printf("Server starting on %s", cfg.GetServerAddress())
log.Printf("Environment: %s", cfg.App.Environment)
log.Printf("Debug mode: %t", cfg.App.Debug)
log.Printf("Visit http://%s to access the application", cfg.GetServerAddress())
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatal("Server failed to start:", err)
}
}