package main import ( "context" "fmt" "log" "net/http" "os" "git.unsupervised.ca/walkies/internal/db" "git.unsupervised.ca/walkies/internal/server" ) func main() { // Build MySQL DSN from environment variables dbHost := getenv("DB_HOST", "localhost") dbPort := getenv("DB_PORT", "3306") dbUser := getenv("DB_USER", "root") dbPassword := getenv("DB_PASSWORD", "") dbName := getenv("DB_NAME", "walkies") dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?parseTime=true", dbUser, dbPassword, dbHost, dbPort, dbName) jwtSecret := getenv("JWT_SECRET", "change-me-in-production") staticDir := getenv("STATIC_DIR", "./web/dist") port := getenv("PORT", "8080") database, err := db.Open(dsn) if err != nil { log.Fatalf("open database: %v", err) } defer database.Close() if err := db.Migrate(context.Background(), database); err != nil { log.Fatalf("migrate database: %v", err) } handler := server.New(database, jwtSecret, staticDir) addr := fmt.Sprintf(":%s", port) log.Printf("server listening on %s", addr) if err := http.ListenAndServe(addr, handler); err != nil { log.Fatalf("server error: %v", err) } } func getenv(key, fallback string) string { if v := os.Getenv(key); v != "" { return v } return fallback }