Files
sitemap-generator-xml-golang/main.go
2026-02-05 19:13:45 +05:30

73 lines
1.7 KiB
Go

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)
}
}