diff --git a/src/routes.go b/src/routes.go index ae07707..1d1b54a 100644 --- a/src/routes.go +++ b/src/routes.go @@ -54,10 +54,16 @@ func postEnter(c *gin.Context) { } // Parse form - a1h := strings.TrimSpace(c.PostForm("a1")) - a2h := strings.TrimSpace(c.PostForm("a2")) - b1h := strings.TrimSpace(c.PostForm("b1")) - b2h := strings.TrimSpace(c.PostForm("b2")) + p1h := strings.TrimSpace(c.PostForm("p1")) + p2h := strings.TrimSpace(c.PostForm("p2")) + p3h := strings.TrimSpace(c.PostForm("p3")) + p4h := strings.TrimSpace(c.PostForm("p4")) + + p1t := strings.TrimSpace(c.PostForm("team_p1")) + p2t := strings.TrimSpace(c.PostForm("team_p2")) + p3t := strings.TrimSpace(c.PostForm("team_p3")) + p4t := strings.TrimSpace(c.PostForm("team_p4")) + scoreA := atoiSafe(c.PostForm("scoreA")) scoreB := atoiSafe(c.PostForm("scoreB")) @@ -84,25 +90,46 @@ func postEnter(c *gin.Context) { return u, nil } - var a1, a2, b1, b2 *User + var p1, p2, p3, p4 *User // Always ensure A1 exists, fallback to current if empty var err error - if a1, err = resolveUser(a1h); err != nil { + if p1, err = resolveUser(p1h); err != nil { return } - if a2, err = resolveUser(a2h); err != nil { + if p2, err = resolveUser(p2h); err != nil { return } - if b1, err = resolveUser(b1h); err != nil { + if p3, err = resolveUser(p3h); err != nil { return } - if b2, err = resolveUser(b2h); err != nil { + if p4, err = resolveUser(p4h); err != nil { return } + // Generate raw teams + var players []Player + var team1ps, team2ps []Player + users := []*User{p1, p2, p3, p4} + sides := []string{p1t, p2t, p3t, p4t} + var playerbuf []float64 + + for i, u := range users { + if u != nil { + if sides[i] == "A" || sides[i] == "B" { + players = append(players, Player{u, sides[i], 0}) + playerbuf = append(playerbuf, u.Elo) + if sides[i] == "A" { + team1ps = append(team1ps, Player{u, sides[i], 0}) + } else { + team2ps = append(team2ps, Player{u, sides[i], 0}) + } + } + } + } + // Check for at least one player on each side - if b1 == nil && b2 == nil || a1 == nil && a2 == nil { + if len(team1ps) == 0 || len(team2ps) == 0 { SaveForm(c) SetMessage(c, "There must be at least one player on each side") c.Redirect(http.StatusSeeOther, "/enter") @@ -111,7 +138,6 @@ func postEnter(c *gin.Context) { // Check for duplicate users seen := map[uint]bool{} - users := []*User{a1, a2, b1, b2} for i, u := range users { if u != nil { if seen[u.ID] { @@ -148,25 +174,8 @@ func postEnter(c *gin.Context) { return } - var players []Player - fmt.Println("Len players", len(players)) - var playerbuf []float64 - for i, user := range users { - if user != nil { - var side string - if i > 1 { - side = "B" - } else { - side = "A" - } - players = append(players, Player{u: user, side: side, dElo: 0}) - playerbuf = append(playerbuf, user.Elo) - } - - } - - team1 := NewTeam(players[:len(players)/2], g.ScoreA) - team2 := NewTeam(players[len(players)/2:], g.ScoreB) + team1 := NewTeam(team1ps, g.ScoreA) + team2 := NewTeam(team2ps, g.ScoreB) // Set new elo for all players GetNewElo([]*Team{team1, team2}) diff --git a/templates/enter.html b/templates/enter.html index 3ca65e8..b6d3768 100644 --- a/templates/enter.html +++ b/templates/enter.html @@ -8,34 +8,81 @@ {{end}}