Loading CHANGELOG.md +2 −1 Original line number Diff line number Diff line Loading @@ -4,7 +4,8 @@ All notable changes to this project are documented below. The format is based on [keep a changelog](http://keepachangelog.com) and this project uses [semantic versioning](http://semver.org). ## [Unreleased] ### Changed - Update username on leaderboard and tournament records when processing a score update. ## [2.9.1] - 2020-01-14 ### Changed Loading server/core_account.go +10 −18 Original line number Diff line number Diff line Loading @@ -212,26 +212,23 @@ WHERE u.id IN (` + strings.Join(statements, ",") + `)` } func UpdateAccount(ctx context.Context, logger *zap.Logger, db *sql.DB, userID uuid.UUID, username string, displayName, timezone, location, langTag, avatarURL, metadata *wrappers.StringValue) error { index := 1 statements := make([]string, 0) params := make([]interface{}, 0) statements := make([]string, 0, 7) params := make([]interface{}, 0, 8) if username != "" { if invalidCharsRegex.MatchString(username) { return errors.New("Username invalid, no spaces or control characters allowed.") } statements = append(statements, "username = $"+strconv.Itoa(index)) params = append(params, username) index++ statements = append(statements, "username = $"+strconv.Itoa(len(params))) } if displayName != nil { if d := displayName.GetValue(); d == "" { statements = append(statements, "display_name = NULL") } else { statements = append(statements, "display_name = $"+strconv.Itoa(index)) params = append(params, d) index++ statements = append(statements, "display_name = $"+strconv.Itoa(len(params))) } } Loading @@ -239,9 +236,8 @@ func UpdateAccount(ctx context.Context, logger *zap.Logger, db *sql.DB, userID u if t := timezone.GetValue(); t == "" { statements = append(statements, "timezone = NULL") } else { statements = append(statements, "timezone = $"+strconv.Itoa(index)) params = append(params, t) index++ statements = append(statements, "timezone = $"+strconv.Itoa(len(params))) } } Loading @@ -249,9 +245,8 @@ func UpdateAccount(ctx context.Context, logger *zap.Logger, db *sql.DB, userID u if l := location.GetValue(); l == "" { statements = append(statements, "location = NULL") } else { statements = append(statements, "location = $"+strconv.Itoa(index)) params = append(params, l) index++ statements = append(statements, "location = $"+strconv.Itoa(len(params))) } } Loading @@ -259,9 +254,8 @@ func UpdateAccount(ctx context.Context, logger *zap.Logger, db *sql.DB, userID u if l := langTag.GetValue(); l == "" { statements = append(statements, "lang_tag = NULL") } else { statements = append(statements, "lang_tag = $"+strconv.Itoa(index)) params = append(params, l) index++ statements = append(statements, "lang_tag = $"+strconv.Itoa(len(params))) } } Loading @@ -269,16 +263,14 @@ func UpdateAccount(ctx context.Context, logger *zap.Logger, db *sql.DB, userID u if a := avatarURL.GetValue(); a == "" { statements = append(statements, "avatar_url = NULL") } else { statements = append(statements, "avatar_url = $"+strconv.Itoa(index)) params = append(params, a) index++ statements = append(statements, "avatar_url = $"+strconv.Itoa(len(params))) } } if metadata != nil { statements = append(statements, "metadata = $"+strconv.Itoa(index)) params = append(params, metadata.GetValue()) index++ statements = append(statements, "metadata = $"+strconv.Itoa(len(params))) } if len(statements) == 0 { Loading @@ -287,7 +279,7 @@ func UpdateAccount(ctx context.Context, logger *zap.Logger, db *sql.DB, userID u params = append(params, userID) query := "UPDATE users SET update_time = now(), " + strings.Join(statements, ", ") + " WHERE id = $" + strconv.Itoa(index) query := "UPDATE users SET update_time = now(), " + strings.Join(statements, ", ") + " WHERE id = $" + strconv.Itoa(len(params)) if _, err := db.ExecContext(ctx, query, params...); err != nil { if e, ok := err.(pgx.PgError); ok && e.Code == dbErrorUniqueViolation && strings.Contains(e.Message, "users_username_key") { Loading server/core_leaderboard.go +1 −1 Original line number Diff line number Diff line Loading @@ -358,7 +358,7 @@ func LeaderboardRecordWrite(ctx context.Context, logger *zap.Logger, db *sql.DB, query := `INSERT INTO leaderboard_record (leaderboard_id, owner_id, username, score, subscore, metadata, expiry_time) VALUES ($1, $2, $3, $4, $5, COALESCE($6, '{}'::JSONB), $7) ON CONFLICT (owner_id, leaderboard_id, expiry_time) DO UPDATE SET ` + opSQL + `, num_score = leaderboard_record.num_score + 1, metadata = COALESCE($6, leaderboard_record.metadata), update_time = now()` + filterSQL DO UPDATE SET ` + opSQL + `, num_score = leaderboard_record.num_score + 1, metadata = COALESCE($6, leaderboard_record.metadata), username = COALESCE($3, leaderboard_record.username), update_time = now()` + filterSQL params := make([]interface{}, 0, 9) params = append(params, leaderboardId, ownerID) if username == "" { Loading server/core_tournament.go +1 −1 Original line number Diff line number Diff line Loading @@ -412,7 +412,7 @@ func TournamentRecordWrite(ctx context.Context, logger *zap.Logger, db *sql.DB, query := `INSERT INTO leaderboard_record (leaderboard_id, owner_id, username, score, subscore, metadata, expiry_time, max_num_score) VALUES ($1, $2, $3, $8, $9, COALESCE($7, '{}'::JSONB), $4, $10) ON CONFLICT (owner_id, leaderboard_id, expiry_time) DO UPDATE SET ` + opSQL + `, num_score = leaderboard_record.num_score + 1, metadata = COALESCE($7, leaderboard_record.metadata), update_time = now() DO UPDATE SET ` + opSQL + `, num_score = leaderboard_record.num_score + 1, metadata = COALESCE($7, leaderboard_record.metadata), username = COALESCE($3, leaderboard_record.username), update_time = now() RETURNING num_score, max_num_score` params = append(params, scoreAbs, subscoreAbs, leaderboard.MaxNumScore) Loading Loading
CHANGELOG.md +2 −1 Original line number Diff line number Diff line Loading @@ -4,7 +4,8 @@ All notable changes to this project are documented below. The format is based on [keep a changelog](http://keepachangelog.com) and this project uses [semantic versioning](http://semver.org). ## [Unreleased] ### Changed - Update username on leaderboard and tournament records when processing a score update. ## [2.9.1] - 2020-01-14 ### Changed Loading
server/core_account.go +10 −18 Original line number Diff line number Diff line Loading @@ -212,26 +212,23 @@ WHERE u.id IN (` + strings.Join(statements, ",") + `)` } func UpdateAccount(ctx context.Context, logger *zap.Logger, db *sql.DB, userID uuid.UUID, username string, displayName, timezone, location, langTag, avatarURL, metadata *wrappers.StringValue) error { index := 1 statements := make([]string, 0) params := make([]interface{}, 0) statements := make([]string, 0, 7) params := make([]interface{}, 0, 8) if username != "" { if invalidCharsRegex.MatchString(username) { return errors.New("Username invalid, no spaces or control characters allowed.") } statements = append(statements, "username = $"+strconv.Itoa(index)) params = append(params, username) index++ statements = append(statements, "username = $"+strconv.Itoa(len(params))) } if displayName != nil { if d := displayName.GetValue(); d == "" { statements = append(statements, "display_name = NULL") } else { statements = append(statements, "display_name = $"+strconv.Itoa(index)) params = append(params, d) index++ statements = append(statements, "display_name = $"+strconv.Itoa(len(params))) } } Loading @@ -239,9 +236,8 @@ func UpdateAccount(ctx context.Context, logger *zap.Logger, db *sql.DB, userID u if t := timezone.GetValue(); t == "" { statements = append(statements, "timezone = NULL") } else { statements = append(statements, "timezone = $"+strconv.Itoa(index)) params = append(params, t) index++ statements = append(statements, "timezone = $"+strconv.Itoa(len(params))) } } Loading @@ -249,9 +245,8 @@ func UpdateAccount(ctx context.Context, logger *zap.Logger, db *sql.DB, userID u if l := location.GetValue(); l == "" { statements = append(statements, "location = NULL") } else { statements = append(statements, "location = $"+strconv.Itoa(index)) params = append(params, l) index++ statements = append(statements, "location = $"+strconv.Itoa(len(params))) } } Loading @@ -259,9 +254,8 @@ func UpdateAccount(ctx context.Context, logger *zap.Logger, db *sql.DB, userID u if l := langTag.GetValue(); l == "" { statements = append(statements, "lang_tag = NULL") } else { statements = append(statements, "lang_tag = $"+strconv.Itoa(index)) params = append(params, l) index++ statements = append(statements, "lang_tag = $"+strconv.Itoa(len(params))) } } Loading @@ -269,16 +263,14 @@ func UpdateAccount(ctx context.Context, logger *zap.Logger, db *sql.DB, userID u if a := avatarURL.GetValue(); a == "" { statements = append(statements, "avatar_url = NULL") } else { statements = append(statements, "avatar_url = $"+strconv.Itoa(index)) params = append(params, a) index++ statements = append(statements, "avatar_url = $"+strconv.Itoa(len(params))) } } if metadata != nil { statements = append(statements, "metadata = $"+strconv.Itoa(index)) params = append(params, metadata.GetValue()) index++ statements = append(statements, "metadata = $"+strconv.Itoa(len(params))) } if len(statements) == 0 { Loading @@ -287,7 +279,7 @@ func UpdateAccount(ctx context.Context, logger *zap.Logger, db *sql.DB, userID u params = append(params, userID) query := "UPDATE users SET update_time = now(), " + strings.Join(statements, ", ") + " WHERE id = $" + strconv.Itoa(index) query := "UPDATE users SET update_time = now(), " + strings.Join(statements, ", ") + " WHERE id = $" + strconv.Itoa(len(params)) if _, err := db.ExecContext(ctx, query, params...); err != nil { if e, ok := err.(pgx.PgError); ok && e.Code == dbErrorUniqueViolation && strings.Contains(e.Message, "users_username_key") { Loading
server/core_leaderboard.go +1 −1 Original line number Diff line number Diff line Loading @@ -358,7 +358,7 @@ func LeaderboardRecordWrite(ctx context.Context, logger *zap.Logger, db *sql.DB, query := `INSERT INTO leaderboard_record (leaderboard_id, owner_id, username, score, subscore, metadata, expiry_time) VALUES ($1, $2, $3, $4, $5, COALESCE($6, '{}'::JSONB), $7) ON CONFLICT (owner_id, leaderboard_id, expiry_time) DO UPDATE SET ` + opSQL + `, num_score = leaderboard_record.num_score + 1, metadata = COALESCE($6, leaderboard_record.metadata), update_time = now()` + filterSQL DO UPDATE SET ` + opSQL + `, num_score = leaderboard_record.num_score + 1, metadata = COALESCE($6, leaderboard_record.metadata), username = COALESCE($3, leaderboard_record.username), update_time = now()` + filterSQL params := make([]interface{}, 0, 9) params = append(params, leaderboardId, ownerID) if username == "" { Loading
server/core_tournament.go +1 −1 Original line number Diff line number Diff line Loading @@ -412,7 +412,7 @@ func TournamentRecordWrite(ctx context.Context, logger *zap.Logger, db *sql.DB, query := `INSERT INTO leaderboard_record (leaderboard_id, owner_id, username, score, subscore, metadata, expiry_time, max_num_score) VALUES ($1, $2, $3, $8, $9, COALESCE($7, '{}'::JSONB), $4, $10) ON CONFLICT (owner_id, leaderboard_id, expiry_time) DO UPDATE SET ` + opSQL + `, num_score = leaderboard_record.num_score + 1, metadata = COALESCE($7, leaderboard_record.metadata), update_time = now() DO UPDATE SET ` + opSQL + `, num_score = leaderboard_record.num_score + 1, metadata = COALESCE($7, leaderboard_record.metadata), username = COALESCE($3, leaderboard_record.username), update_time = now() RETURNING num_score, max_num_score` params = append(params, scoreAbs, subscoreAbs, leaderboard.MaxNumScore) Loading