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
	 Grail Finder
					Grail Finder