diff --git a/web/server.go b/web/server.go index afe2d0c..976a973 100644 --- a/web/server.go +++ b/web/server.go @@ -135,6 +135,7 @@ func (s *Server) routes() { // Add heats page route s.router.Get("/heats", s.handleHeats()) + s.router.Get("/heats-content", s.handleHeatsContent()) // Add heats API routes s.router.Route("/api/heats", func(r chi.Router) { @@ -725,6 +726,36 @@ func (s *Server) handleDeleteRacer() http.HandlerFunc { // handleHeats renders the heats page func (s *Server) handleHeats() http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + // Get groups from database + groups, err := s.db.GetGroups() + if err != nil { + s.logger.Error("Failed to get groups", "error", err) + http.Error(w, "Failed to get groups", http.StatusInternalServerError) + return + } + + // Get selected group ID from query parameter + selectedGroupID := int64(0) + groupIDStr := r.URL.Query().Get("group_id") + if groupIDStr != "" { + groupID, err := strconv.ParseInt(groupIDStr, 10, 64) + if err == nil { + selectedGroupID = groupID + } + } + + // Render template + component := templates.Heats(groups, selectedGroupID, s.db) + if err := component.Render(r.Context(), w); err != nil { + s.logger.Error("Failed to render heats template", "error", err) + http.Error(w, "Failed to render page", http.StatusInternalServerError) + } + } +} + +// handleHeatsContent renders the heats content +func (s *Server) handleHeatsContent() http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { // Get groups from database groups, err := s.db.GetGroups() diff --git a/web/templates/heats.templ b/web/templates/heats.templ index bb7202c..6e985f2 100644 --- a/web/templates/heats.templ +++ b/web/templates/heats.templ @@ -7,7 +7,7 @@ import ( "track-gopher/derby" ) -templ Heats(groups []models.Group, racers []models.Racer, selectedGroupID int64, db *db.DB) { +templ Heats(groups []models.Group, selectedGroupID int64, db *db.DB) { @Layout("Race Heats") {