feat(backend): add root route with IP info and move swagger to /docs

- Add root route (/) returning JSON with client IP, API info and links
- Move Swagger docs from /swagger/ to /docs/
- Include X-Forwarded-For and X-Real-IP header support for proxy environments
This commit is contained in:
Tiago Yamamoto 2025-12-14 08:56:25 -03:00
parent 4475bc6bda
commit 60eafdc6e2

View file

@ -62,6 +62,33 @@ func NewRouter() http.Handler {
jobHandler := handlers.NewJobHandler(jobService)
applicationHandler := handlers.NewApplicationHandler(applicationService)
// --- ROOT ROUTE ---
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/" {
http.NotFound(w, r)
return
}
// Get client IP
clientIP := r.Header.Get("X-Forwarded-For")
if clientIP == "" {
clientIP = r.Header.Get("X-Real-IP")
}
if clientIP == "" {
clientIP = r.RemoteAddr
}
w.Header().Set("Content-Type", "application/json")
w.WriteHeader(http.StatusOK)
response := `{
"message": "🐴 GoHorseJobs API is running!",
"ip": "` + clientIP + `",
"docs": "/docs",
"health": "/health",
"version": "1.0.0"
}`
w.Write([]byte(response))
})
mux.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
w.Write([]byte("OK"))
@ -106,8 +133,8 @@ func NewRouter() http.Handler {
log.Println("S3 storage routes registered successfully")
}
// Swagger Route
mux.HandleFunc("/swagger/", httpSwagger.WrapHandler)
// Swagger Route - available at /docs
mux.HandleFunc("/docs/", httpSwagger.WrapHandler)
// Apply middleware chain: Security Headers -> Rate Limiting -> CORS -> Router
// Order matters: outer middleware runs first