package app import ( "net/http" "github.com/go-chi/chi/v5" ) // APIHandler is the interface for API routing (implemented by handlers.Handlers). type APIHandler interface { APIRouter(rw http.ResponseWriter, req *http.Request) } // Router returns the HTTP router for the app. // publicDir is used for /js/ static file serving (e.g. "public"). // apiHandler handles /map/api/* requests; if nil, uses built-in apiRouter. func (a *App) Router(publicDir string, apiHandler APIHandler) http.Handler { r := chi.NewRouter() r.Handle("/js/*", http.FileServer(http.Dir(publicDir))) r.HandleFunc("/client/*", a.client) r.HandleFunc("/logout", a.redirectLogout) r.Route("/map", func(r chi.Router) { if apiHandler != nil { r.HandleFunc("/api/*", apiHandler.APIRouter) } else { r.HandleFunc("/api/*", a.apiRouter) } r.HandleFunc("/updates", a.watchGridUpdates) r.Handle("/grids/*", http.StripPrefix("/map/grids", http.HandlerFunc(a.gridTile))) }) r.HandleFunc("/*", a.serveSPARoot) return r }