Fix bug with table presetting and add table couter and fix the join table

This commit is contained in:
Jonas Hahn
2025-09-18 21:49:28 +02:00
parent 15e71a1348
commit b3310cb905
4 changed files with 25 additions and 21 deletions

View File

@@ -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

View File

@@ -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) {

View File

@@ -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)

View File

@@ -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