Fix: stats and marks queries
This commit is contained in:
@ -50,7 +50,6 @@ func HandleShowColor(w http.ResponseWriter, r *http.Request) {
|
|||||||
abortWithError(w, err.Error())
|
abortWithError(w, err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
// color, exists := fi.Room.WCMap[word]
|
|
||||||
color, exists := fi.Room.FindColor(word)
|
color, exists := fi.Room.FindColor(word)
|
||||||
if !exists {
|
if !exists {
|
||||||
abortWithError(w, "word is not found")
|
abortWithError(w, "word is not found")
|
||||||
|
@ -76,6 +76,10 @@ func HandleJoinTeam(w http.ResponseWriter, r *http.Request) {
|
|||||||
abortWithError(w, err.Error())
|
abortWithError(w, err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if fi.Room == nil {
|
||||||
|
http.Redirect(w, r, "/", 302)
|
||||||
|
return
|
||||||
|
}
|
||||||
if fi.Room.IsRunning && role == "mime" {
|
if fi.Room.IsRunning && role == "mime" {
|
||||||
err = errors.New("cannot join as mime when game is running")
|
err = errors.New("cannot join as mime when game is running")
|
||||||
abortWithError(w, err.Error())
|
abortWithError(w, err.Error())
|
||||||
|
@ -57,20 +57,20 @@ func updateStatsOnGameOver(ctx context.Context, room *models.Room) {
|
|||||||
if player.Role == models.UserRoleMime {
|
if player.Role == models.UserRoleMime {
|
||||||
stats.PlayedAsMime++
|
stats.PlayedAsMime++
|
||||||
if stats.PlayedAsMime > 0 {
|
if stats.PlayedAsMime > 0 {
|
||||||
gamesWonAsMime := stats.MimeWinrate * float64(stats.PlayedAsMime-1)
|
gamesWonAsMime := stats.MimeWinrate * float32(stats.PlayedAsMime-1)
|
||||||
if player.Team == room.TeamWon {
|
if player.Team == room.TeamWon {
|
||||||
gamesWonAsMime++
|
gamesWonAsMime++
|
||||||
}
|
}
|
||||||
stats.MimeWinrate = gamesWonAsMime / float64(stats.PlayedAsMime)
|
stats.MimeWinrate = gamesWonAsMime / float32(stats.PlayedAsMime)
|
||||||
}
|
}
|
||||||
} else if player.Role == models.UserRoleGuesser {
|
} else if player.Role == models.UserRoleGuesser {
|
||||||
stats.PlayedAsGuesser++
|
stats.PlayedAsGuesser++
|
||||||
if stats.PlayedAsGuesser > 0 {
|
if stats.PlayedAsGuesser > 0 {
|
||||||
gamesWonAsGuesser := stats.GuesserWinrate * float64(stats.PlayedAsGuesser-1)
|
gamesWonAsGuesser := stats.GuesserWinrate * float32(stats.PlayedAsGuesser-1)
|
||||||
if player.Team == room.TeamWon {
|
if player.Team == room.TeamWon {
|
||||||
gamesWonAsGuesser++
|
gamesWonAsGuesser++
|
||||||
}
|
}
|
||||||
stats.GuesserWinrate = gamesWonAsGuesser / float64(stats.PlayedAsGuesser)
|
stats.GuesserWinrate = gamesWonAsGuesser / float32(stats.PlayedAsGuesser)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if err := repo.UpdatePlayerStats(ctx, stats); err != nil {
|
if err := repo.UpdatePlayerStats(ctx, stats); err != nil {
|
||||||
|
@ -46,20 +46,20 @@ func updateStatsOnGameOver(ctx context.Context, room *models.Room) {
|
|||||||
if player.Role == models.UserRoleMime {
|
if player.Role == models.UserRoleMime {
|
||||||
stats.PlayedAsMime++
|
stats.PlayedAsMime++
|
||||||
if stats.PlayedAsMime > 0 {
|
if stats.PlayedAsMime > 0 {
|
||||||
gamesWonAsMime := stats.MimeWinrate * float64(stats.PlayedAsMime-1)
|
gamesWonAsMime := stats.MimeWinrate * float32(stats.PlayedAsMime-1)
|
||||||
if player.Team == room.TeamWon {
|
if player.Team == room.TeamWon {
|
||||||
gamesWonAsMime++
|
gamesWonAsMime++
|
||||||
}
|
}
|
||||||
stats.MimeWinrate = gamesWonAsMime / float64(stats.PlayedAsMime)
|
stats.MimeWinrate = gamesWonAsMime / float32(stats.PlayedAsMime)
|
||||||
}
|
}
|
||||||
} else if player.Role == models.UserRoleGuesser {
|
} else if player.Role == models.UserRoleGuesser {
|
||||||
stats.PlayedAsGuesser++
|
stats.PlayedAsGuesser++
|
||||||
if stats.PlayedAsGuesser > 0 {
|
if stats.PlayedAsGuesser > 0 {
|
||||||
gamesWonAsGuesser := stats.GuesserWinrate * float64(stats.PlayedAsGuesser-1)
|
gamesWonAsGuesser := stats.GuesserWinrate * float32(stats.PlayedAsGuesser-1)
|
||||||
if player.Team == room.TeamWon {
|
if player.Team == room.TeamWon {
|
||||||
gamesWonAsGuesser++
|
gamesWonAsGuesser++
|
||||||
}
|
}
|
||||||
stats.GuesserWinrate = gamesWonAsGuesser / float64(stats.PlayedAsGuesser)
|
stats.GuesserWinrate = gamesWonAsGuesser / float32(stats.PlayedAsGuesser)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -148,8 +148,8 @@ type PlayerStats struct {
|
|||||||
OpenedOppositeWords int `db:"opened_opposite_words"`
|
OpenedOppositeWords int `db:"opened_opposite_words"`
|
||||||
OpenedWhiteWords int `db:"opened_white_words"`
|
OpenedWhiteWords int `db:"opened_white_words"`
|
||||||
OpenedBlackWords int `db:"opened_black_words"`
|
OpenedBlackWords int `db:"opened_black_words"`
|
||||||
MimeWinrate float64 `db:"mime_winrate"`
|
MimeWinrate float32 `db:"mime_winrate"`
|
||||||
GuesserWinrate float64 `db:"guesser_winrate"`
|
GuesserWinrate float32 `db:"guesser_winrate"`
|
||||||
PlayedAsMime int `db:"played_as_mime"`
|
PlayedAsMime int `db:"played_as_mime"`
|
||||||
PlayedAsGuesser int `db:"played_as_guesser"`
|
PlayedAsGuesser int `db:"played_as_guesser"`
|
||||||
Rating float32 `db:"rating"`
|
Rating float32 `db:"rating"`
|
||||||
|
@ -39,6 +39,6 @@ func (r *RepoProvider) CardMarksByRoomID(ctx context.Context, roomID string) ([]
|
|||||||
}
|
}
|
||||||
func (r *RepoProvider) CardMarksRemoveByRoomID(ctx context.Context, roomID string) error {
|
func (r *RepoProvider) CardMarksRemoveByRoomID(ctx context.Context, roomID string) error {
|
||||||
db := getDB(ctx, r.DB)
|
db := getDB(ctx, r.DB)
|
||||||
_, err := db.ExecContext(ctx, "DELETE FROM card_marks WHERE room_id = ?;", roomID)
|
_, err := db.ExecContext(ctx, "DELETE FROM card_marks WHERE card_id IN (select id from word_cards where room_id = ?);", roomID)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -37,7 +37,7 @@ func (p *RepoProvider) UpdatePlayerStats(ctx context.Context, stats *models.Play
|
|||||||
mime_winrate = :mime_winrate,
|
mime_winrate = :mime_winrate,
|
||||||
guesser_winrate = :guesser_winrate,
|
guesser_winrate = :guesser_winrate,
|
||||||
played_as_mime = :played_as_mime,
|
played_as_mime = :played_as_mime,
|
||||||
played_as_guesser = :played_as_guesser
|
played_as_guesser = :played_as_guesser,
|
||||||
rating = :rating
|
rating = :rating
|
||||||
WHERE username = :username`, stats)
|
WHERE username = :username`, stats)
|
||||||
return err
|
return err
|
||||||
|
Reference in New Issue
Block a user