package server import ( "encoding/json" "net/http" "github.com/food-ai/backend/internal/auth" "github.com/food-ai/backend/internal/middleware" "github.com/food-ai/backend/internal/user" "github.com/go-chi/chi/v5" "github.com/jackc/pgx/v5/pgxpool" ) func NewRouter( pool *pgxpool.Pool, authHandler *auth.Handler, userHandler *user.Handler, authMiddleware func(http.Handler) http.Handler, allowedOrigins []string, ) *chi.Mux { r := chi.NewRouter() // Global middleware r.Use(middleware.RequestID) r.Use(middleware.Logging) r.Use(middleware.Recovery) r.Use(middleware.CORS(allowedOrigins)) // Public r.Get("/health", healthCheck(pool)) r.Route("/auth", func(r chi.Router) { r.Post("/login", authHandler.Login) r.Post("/refresh", authHandler.Refresh) r.Post("/logout", authHandler.Logout) }) // Protected r.Group(func(r chi.Router) { r.Use(authMiddleware) r.Get("/profile", userHandler.Get) r.Put("/profile", userHandler.Update) }) return r } func healthCheck(pool *pgxpool.Pool) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { dbStatus := "connected" if err := pool.Ping(r.Context()); err != nil { dbStatus = "disconnected" } w.Header().Set("Content-Type", "application/json") _ = json.NewEncoder(w).Encode(map[string]string{ "status": "ok", "version": "0.1.0", "db": dbStatus, }) } }