package main import ( "log" "net/http" "os" "go-backend/internal/database" "go-backend/internal/database/sqlc" "go-backend/internal/handlers" "go-backend/internal/services" "github.com/joho/godotenv" ) func main() { // Load .env file if err := godotenv.Load(); err != nil { log.Println("No .env file found") } // Connect to database db, err := database.Connect() if err != nil { log.Fatal("Failed to connect to database:", err) } defer db.Close() queries := sqlc.New(db) userService := services.NewUserService(db, queries) authService := services.NewAuthService(db, queries) handler := handlers.NewHandler(userService, authService) // Create router mux := http.NewServeMux() // Routes mux.Handle("GET /static/", http.StripPrefix("/static/", http.FileServer(http.Dir("./ui/static")))) mux.HandleFunc("GET /{$}", handler.HomeHandler) mux.HandleFunc("GET /login", handler.LoginPageHandler) mux.HandleFunc("/user", handler.UserHandler) mux.HandleFunc("/signup", handler.SignUpPageHandler) mux.HandleFunc("POST /api/login", handler.LoginHandler) mux.HandleFunc("POST /api/logout", handler.LogoutHandler) mux.HandleFunc("POST /api/signup", handler.SignUpHandler) // Apply middleware (CORS first, then logging) muxMiddleware := handlers.LoggingMiddleware(handlers.CORSMiddleware(mux)) // Start server port := getEnv("PORT", "8080") log.Printf("Server starting on port %s", port) if err := http.ListenAndServe(":"+port, muxMiddleware); err != nil { log.Fatal("Server failed to start:", err) } } func getEnv(key, defaultValue string) string { if value := os.Getenv(key); value != "" { return value } return defaultValue }