- Added a new AGENTS.md file to document the project structure and conventions. - Updated .gitignore to include node_modules and refined cursor rules. - Introduced new backend and frontend components for improved map interactions, including context menus and controls. - Enhanced API composables for better admin and authentication functionalities. - Refactored existing components for cleaner code and improved user experience. - Updated README.md to clarify production asset serving and user setup instructions.
38 lines
1.0 KiB
Go
38 lines
1.0 KiB
Go
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
|
|
}
|