package main import ( "log" "net/http" "os" "sitemap-api/database" "sitemap-api/handlers" "github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5/middleware" "github.com/go-chi/cors" ) func main() { // Initialize database db, err := database.NewDB("sitemap.db") if err != nil { log.Fatal("Failed to initialize database:", err) } defer db.Close() // Initialize stream manager streamManager := handlers.NewStreamManager() // Initialize handler h := handlers.NewHandler(db, streamManager) // Setup router r := chi.NewRouter() // Middleware r.Use(middleware.Logger) r.Use(middleware.Recoverer) r.Use(middleware.RealIP) r.Use(cors.Handler(cors.Options{ AllowedOrigins: []string{"https://*", "http://*"}, AllowedMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"}, AllowedHeaders: []string{"Accept", "Authorization", "Content-Type"}, ExposedHeaders: []string{"Link"}, AllowCredentials: true, MaxAge: 300, })) // Serve static HTML at root r.Get("/", func(w http.ResponseWriter, r *http.Request) { http.ServeFile(w, r, "static/index.html") }) // API Routes r.Post("/generate-sitemap-xml", h.GenerateSitemapXML) r.Get("/stream/{uuid}", h.StreamSSE) r.Get("/download/{uuid}", h.DownloadSitemap) r.Get("/sites", h.GetSites) r.Get("/sites/{id}", h.GetSite) r.Delete("/sites/{id}", h.DeleteSite) r.Get("/health", h.Health) // Get port from environment or use default port := os.Getenv("PORT") if port == "" { port = "8080" } log.Printf("Server starting on port %s...", port) log.Printf("Visit http://localhost:%s to use the sitemap generator", port) if err := http.ListenAndServe(":"+port, r); err != nil { log.Fatal("Server failed to start:", err) } }