Fix bug with table presetting and add table couter and fix the join table
This commit is contained in:
@@ -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,18 +99,13 @@ 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 {
|
||||
p1 = resolveUser(p1h)
|
||||
p2 = resolveUser(p2h)
|
||||
p3 = resolveUser(p3h)
|
||||
p4 = resolveUser(p4h)
|
||||
|
||||
if p1 == nil {
|
||||
c.Redirect(http.StatusSeeOther, "/enter")
|
||||
return
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user