make generate button work maybe

main
DustyP 9 months ago
parent ed97a2ec62
commit e32eb58500

@ -139,7 +139,7 @@ func (s *Server) routes() {
// Add heats API routes // Add heats API routes
s.router.Route("/api/heats", func(r chi.Router) { s.router.Route("/api/heats", func(r chi.Router) {
r.Post("/save", s.handleSaveHeats()) r.Post("/generate", s.handleGenerateHeats())
}) })
// Main page // Main page
@ -832,6 +832,64 @@ func (s *Server) handleHeatsContent() http.HandlerFunc {
} }
} }
// handleGenerateHeats generates heats for a group
func (s *Server) handleGenerateHeats() http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
// Get selected group ID from query parameter
groupIDStr := r.URL.Query().Get("group_id")
if groupIDStr == "" {
http.Error(w, "Group ID is required", http.StatusBadRequest)
return
}
groupID, err := strconv.ParseInt(groupIDStr, 10, 64)
if err != nil {
http.Error(w, "Invalid group ID", http.StatusBadRequest)
return
}
// Get racers for the group
racers, err := s.db.GetRacersByGroup(groupID)
if err != nil {
s.logger.Error("Failed to get racers", "error", err)
http.Error(w, "Failed to get racers", http.StatusInternalServerError)
return
}
// Convert models.Racer to derby.Racer
derbyRacers := make([]derby.Racer, len(racers))
for i, r := range racers {
derbyRacers[i] = derby.Racer{
ID: r.ID,
FirstName: r.FirstName,
LastName: r.LastName,
CarNumber: r.CarNumber,
}
}
// Generate and convert heats
derbyHeats := derby.GenerateHeats(derbyRacers)
heats := make([]models.Heat, len(derbyHeats))
for i, h := range derbyHeats {
heats[i] = models.Heat{
HeatNum: i + 1,
Lane1ID: h.Lane1ID,
Lane2ID: h.Lane2ID,
Lane3ID: h.Lane3ID,
Lane4ID: h.Lane4ID,
}
}
s.db.SaveHeats(groupID, heats)
// Render template
component := templates.HeatsContent(heats, racers, groupID)
if err := component.Render(r.Context(), w); err != nil {
s.logger.Error("Failed to render heats content", "error", err)
http.Error(w, "Failed to render content", http.StatusInternalServerError)
}
}
}
// handleSaveHeats saves heats for a group // handleSaveHeats saves heats for a group
func (s *Server) handleSaveHeats() http.HandlerFunc { func (s *Server) handleSaveHeats() http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) { return func(w http.ResponseWriter, r *http.Request) {

@ -82,7 +82,7 @@ templ HeatsContent(heats []models.Heat, racers []models.Racer, groupID int64) {
<button <button
class="btn btn-primary me-2" class="btn btn-primary me-2"
hx-post={ "/api/heats/generate?group_id=" + strconv.FormatInt(groupID, 10) } hx-post={ "/api/heats/generate?group_id=" + strconv.FormatInt(groupID, 10) }
hx-target="#heats-list" hx-target="#heats-content"
hx-swap="innerHTML" hx-swap="innerHTML"
> >
Regenerate Heats Regenerate Heats

@ -232,7 +232,7 @@ func HeatsContent(heats []models.Heat, racers []models.Racer, groupID int64) tem
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }
templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "\" hx-target=\"#heats-list\" hx-swap=\"innerHTML\">Regenerate Heats</button></div></div>") templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 18, "\" hx-target=\"#heats-content\" hx-swap=\"innerHTML\">Regenerate Heats</button></div></div>")
if templ_7745c5c3_Err != nil { if templ_7745c5c3_Err != nil {
return templ_7745c5c3_Err return templ_7745c5c3_Err
} }

Loading…
Cancel
Save