diff --git a/web/server.go b/web/server.go index 278676e..c15c326 100644 --- a/web/server.go +++ b/web/server.go @@ -142,6 +142,9 @@ func (s *Server) routes() { // Main page s.router.Get("/", s.handleIndex()) + + // Add racers list route + s.router.Get("/admin/racers/list", s.handleRacersList()) } // Start starts the web server @@ -602,9 +605,11 @@ func (s *Server) handleCreateRacer() http.HandlerFunc { return } - // Return success - w.WriteHeader(http.StatusCreated) - fmt.Fprintf(w, `{"id":%d}`, id) + s.logger.Info("Racer created", "id", id) + + // Return success message + w.Header().Set("Content-Type", "text/html") + w.Write([]byte(`
Racer added successfully!
`)) } } @@ -840,3 +845,31 @@ func (s *Server) handleSaveHeats() http.HandlerFunc { w.Write([]byte(`

Heats saved successfully!

`)) } } + +// handleRacersList renders the racers list component +func (s *Server) handleRacersList() http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + // Get racers and groups + racers, err := s.db.GetRacers() + if err != nil { + s.logger.Error("Failed to get racers", "error", err) + http.Error(w, "Failed to get racers", http.StatusInternalServerError) + return + } + + 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 + } + + // Render just the racers list component + component := templates.RacersList(racers, groups) + if err := component.Render(r.Context(), w); err != nil { + s.logger.Error("Failed to render racers list", "error", err) + http.Error(w, "Failed to render racers list", http.StatusInternalServerError) + return + } + } +} diff --git a/web/templates/admin.templ b/web/templates/admin.templ index 3efbaa0..e189003 100644 --- a/web/templates/admin.templ +++ b/web/templates/admin.templ @@ -199,4 +199,53 @@ func getGroupNameForRacer(groups []models.Group, groupID int64) string { } } return "Unknown Group" +} + +templ RacersList(racers []models.Racer, groups []models.Group) { + if len(racers) == 0 { +
+

No racers added yet.

+
+ } else { +
+ + + + + + + + + + + for _, racer := range racers { + + + + + + + } + +
NameCar #GroupActions
{ racer.FirstName + " " + racer.LastName }{ racer.CarNumber }{ getGroupNameForRacer(groups, racer.GroupID) } +
+ + +
+
+
+ } } \ No newline at end of file diff --git a/web/templates/admin_templ.go b/web/templates/admin_templ.go index b2e3747..b967459 100644 --- a/web/templates/admin_templ.go +++ b/web/templates/admin_templ.go @@ -259,4 +259,128 @@ func getGroupNameForRacer(groups []models.Group, groupID int64) string { return "Unknown Group" } +func RacersList(racers []models.Racer, groups []models.Group) templ.Component { + return templruntime.GeneratedTemplate(func(templ_7745c5c3_Input templruntime.GeneratedComponentInput) (templ_7745c5c3_Err error) { + templ_7745c5c3_W, ctx := templ_7745c5c3_Input.Writer, templ_7745c5c3_Input.Context + if templ_7745c5c3_CtxErr := ctx.Err(); templ_7745c5c3_CtxErr != nil { + return templ_7745c5c3_CtxErr + } + templ_7745c5c3_Buffer, templ_7745c5c3_IsBuffer := templruntime.GetBuffer(templ_7745c5c3_W) + if !templ_7745c5c3_IsBuffer { + defer func() { + templ_7745c5c3_BufErr := templruntime.ReleaseBuffer(templ_7745c5c3_Buffer) + if templ_7745c5c3_Err == nil { + templ_7745c5c3_Err = templ_7745c5c3_BufErr + } + }() + } + ctx = templ.InitializeContext(ctx) + templ_7745c5c3_Var13 := templ.GetChildren(ctx) + if templ_7745c5c3_Var13 == nil { + templ_7745c5c3_Var13 = templ.NopComponent + } + ctx = templ.ClearChildren(ctx) + if len(racers) == 0 { + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 24, "

No racers added yet.

") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } else { + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 25, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + for _, racer := range racers { + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 26, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 33, "
NameCar #GroupActions
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var14 string + templ_7745c5c3_Var14, templ_7745c5c3_Err = templ.JoinStringErrs(racer.FirstName + " " + racer.LastName) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/admin.templ`, Line: 223, Col: 51} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var14)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 27, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var15 string + templ_7745c5c3_Var15, templ_7745c5c3_Err = templ.JoinStringErrs(racer.CarNumber) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/admin.templ`, Line: 224, Col: 28} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var15)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 28, "") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + var templ_7745c5c3_Var16 string + templ_7745c5c3_Var16, templ_7745c5c3_Err = templ.JoinStringErrs(getGroupNameForRacer(groups, racer.GroupID)) + if templ_7745c5c3_Err != nil { + return templ.Error{Err: templ_7745c5c3_Err, FileName: `web/templates/admin.templ`, Line: 225, Col: 56} + } + _, templ_7745c5c3_Err = templ_7745c5c3_Buffer.WriteString(templ.EscapeString(templ_7745c5c3_Var16)) + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 29, "
") + if templ_7745c5c3_Err != nil { + return templ_7745c5c3_Err + } + } + return nil + }) +} + var _ = templruntime.GeneratedTemplate diff --git a/web/templates/register.templ b/web/templates/register.templ index 14aee96..fe99ea9 100644 --- a/web/templates/register.templ +++ b/web/templates/register.templ @@ -134,11 +134,19 @@ templ RegisterForm(groups []models.Group) {

Add New Racer

+
@@ -173,4 +181,10 @@ templ RegisterForm(groups []models.Group) {
+ + } \ No newline at end of file diff --git a/web/templates/register_templ.go b/web/templates/register_templ.go index ec5cd13..c4d7a55 100644 --- a/web/templates/register_templ.go +++ b/web/templates/register_templ.go @@ -100,7 +100,7 @@ func RegisterForm(groups []models.Group) templ.Component { templ_7745c5c3_Var4 = templ.NopComponent } ctx = templ.ClearChildren(ctx) - templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 6, "

Add New Racer

") + templ_7745c5c3_Err = templruntime.WriteString(templ_7745c5c3_Buffer, 10, "
") if templ_7745c5c3_Err != nil { return templ_7745c5c3_Err }