diff --git a/src/handlers/enter.go b/src/handlers/enter.go index cf9bbf8..ee584bf 100644 --- a/src/handlers/enter.go +++ b/src/handlers/enter.go @@ -37,6 +37,7 @@ func getEnter(c *gin.Context) { } func postEnter(c *gin.Context) { + // Ensure current user current := repository.FindUser(c) if current == nil { c.Redirect(http.StatusFound, "/login") @@ -46,12 +47,13 @@ func postEnter(c *gin.Context) { sess := sessions.Default(c) tableSlug := sess.Get("TableSlug") + + // Get the current table var slug string var t *repository.Table if tableSlug != nil { slug = tableSlug.(string) if slug != "" { - // Get the current table repository.GetDB().Model(&repository.Table{}).Where("slug = ?", slug).First(&t) } else { t = nil @@ -64,7 +66,7 @@ func postEnter(c *gin.Context) { p3h := strings.TrimSpace(c.PostForm("p3")) p4h := strings.TrimSpace(c.PostForm("p4")) - p1t := strings.TrimSpace(c.PostForm("team_p1")) + p1t := strings.TrimSpace(c.PostForm("team_p1")) // A, B, None p2t := strings.TrimSpace(c.PostForm("team_p2")) p3t := strings.TrimSpace(c.PostForm("team_p3")) p4t := strings.TrimSpace(c.PostForm("team_p4")) @@ -86,7 +88,7 @@ func postEnter(c *gin.Context) { return nil } u := repository.FindUser(handle) - if u != nil { + if u == nil { repository.SaveForm(c) repository.SetMessage(c, fmt.Sprintf(`Player "%v" does not exist`, handle)) c.Redirect(http.StatusSeeOther, "/enter") @@ -97,19 +99,14 @@ func postEnter(c *gin.Context) { var p1, p2, p3, p4 *repository.User - // Always ensure A1 exists, fallback to current if empty - var err error - if p1 = resolveUser(p1h); p1 != nil { - return - } - if p2 = resolveUser(p2h); p2 != nil { - return - } - if p3 = resolveUser(p3h); p3 != nil { - return - } - if p4 = resolveUser(p4h); p4 != nil { - return + p1 = resolveUser(p1h) + p2 = resolveUser(p2h) + p3 = resolveUser(p3h) + p4 = resolveUser(p4h) + + if p1 == nil { + c.Redirect(http.StatusSeeOther, "/enter") + return } // Generate raw teams @@ -192,6 +189,8 @@ func postEnter(c *gin.Context) { } for i, p := range players { + repository.GetDB().Save(p.User) + p.DeltaElo = players[i].User.Elo - playerbuf[i] p.GameID = g.ID p.UserID = p.User.ID @@ -206,6 +205,7 @@ func postEnter(c *gin.Context) { var expr = gorm.Expr(updateString+" + ?", 1) // Update win or loss + var err error err = repository.GetDB().Model(&repository.User{}). Where("id = ?", p.User.ID). UpdateColumn(updateString, expr).UpdateColumn("game_count", gorm.Expr("game_count + ?", 1)).Error diff --git a/src/handlers/table.go b/src/handlers/table.go index 4fb088f..845ec8a 100644 --- a/src/handlers/table.go +++ b/src/handlers/table.go @@ -48,10 +48,14 @@ func postTable(c *gin.Context) { session := sessions.Default(c) if len(table.Players) == 2 || len(table.Players) == 4 { + var tableObj repository.Table + repository.GetDB().Model(&repository.Table{}).Where("slug = ?", slug).First(&tableObj) + tableObj.Slug = slug + tableObj.GameCount++ // Pretend we got some values from somewhere else var count int - tags := []string{"a1", "b1", "a2", "b2"} + tags := []string{"p1", "p2", "p3", "p4"} formData := make(map[string]string) for _, value := range table.Players { formData[tags[count]] = value.Username @@ -68,7 +72,7 @@ func postTable(c *gin.Context) { // Reset the table tables[slug] = &TableInfo{} - repository.GetDB().Save(&repository.Table{Slug: slug}) + repository.GetDB().Save(tableObj) c.Redirect(302, "/enter") return @@ -76,7 +80,6 @@ func postTable(c *gin.Context) { } repository.SetMessage(c, "Wrong amount of players!") c.Redirect(302, "/table/"+slug) - } func postTableReset(c *gin.Context) { diff --git a/src/repository/crud.go b/src/repository/crud.go index 609994f..b3441e0 100644 --- a/src/repository/crud.go +++ b/src/repository/crud.go @@ -64,6 +64,7 @@ func FindOrCreateUserFromEmail(email string) *User { u = User{ Email: email, Username: utils.DefaultUsername(), + Elo: 1500, } if err := EnsureUniqueUsernameAndSlug(&u); err != nil { log.Println("Ensure unique:", err) diff --git a/src/repository/models.go b/src/repository/models.go index 5e71d03..fcfcaca 100644 --- a/src/repository/models.go +++ b/src/repository/models.go @@ -19,7 +19,7 @@ type User struct { WinCount int LossCount int - Games []Game `gorm:"many2many:game_user"` + Games []Game `gorm:"many2many:game_users"` LastLogin time.Time Active bool } @@ -38,7 +38,7 @@ type Game struct { TableID *uint Table *Table - Users []User `gorm:"many2many:game_user"` + Users []User `gorm:"many2many:game_users"` ScoreA int ScoreB int