some cleanup

This commit is contained in:
Maximilian Keßler 2023-11-24 17:28:40 +01:00
parent a377dd74af
commit d8ef86dcfe
Signed by: max
GPG key ID: BCC5A619923C0BA5
2 changed files with 8 additions and 19 deletions

View file

@ -298,13 +298,6 @@ CREATE TABLE user_ratings (
user_id INTEGER NOT NULL, user_id INTEGER NOT NULL,
type SMALLINT NOT NULL, type SMALLINT NOT NULL,
/**
* Do we want to store this here as well? Would be nice to be displayed in some elo page imo.
* Note: We don't need to store the result (i guess), since we can easily retrieve that info by looking up the game using the league_id
* TODO: Since I'm not even sure on the rating model yet (I could imagine something slightly different than a team rating),
* I'll leave this here as potentially null for now and don't implement it.
*/
team_rating REAL,
change REAL NOT NULL, change REAL NOT NULL,
value_after REAL NOT NULL, value_after REAL NOT NULL,
@ -357,14 +350,3 @@ CREATE TABLE user_statistics (
average_game_moves REAL GENERATED ALWAYS AS (CASE WHEN games_played != 0 THEN CAST(total_game_moves AS REAL) / games_played ELSE NULL END) STORED, average_game_moves REAL GENERATED ALWAYS AS (CASE WHEN games_played != 0 THEN CAST(total_game_moves AS REAL) / games_played ELSE NULL END) STORED,
PRIMARY KEY (user_id, variant_type) PRIMARY KEY (user_id, variant_type)
); );
/**
* TODO: I'm really unsure right now how to store user-related statistics, stuff like
* - Current streak
* - Average bdrs/moves/whatever
* - Cumulative stuff like 'number of wins/losses', 'number of strikeouts' etc.
* Computationally it would just be fine to re-evaluate them whenever needed, since it's only looking stuff up in the database + some linear time calculation.
* On the other hand, it would be sort of nice to have them here as well.
* In the latter case, I'd probably suggest having just one row for each user that we automatically update whenever we process a game of that user,
* together with an indication on how recent that entry is (so that on query, we always know if it's up to date).
*/

View file

@ -1,6 +1,8 @@
import enum import enum
from typing import List, Tuple, Set from typing import List, Tuple, Set
import psycopg2.extras
from hanabi import hanab_game from hanabi import hanab_game
import utils import utils
from database import conn_manager from database import conn_manager
@ -24,7 +26,7 @@ class GameAnalysisResult:
bdrs: List[Tuple[hanab_game.DeckCard, int]], bdrs: List[Tuple[hanab_game.DeckCard, int]],
lost_crits: List[hanab_game.DeckCard] lost_crits: List[hanab_game.DeckCard]
): ):
self.outcome = GameOutcome self.outcomes = outcomes
self.bdrs = bdrs self.bdrs = bdrs
self.lost_crits = lost_crits self.lost_crits = lost_crits
@ -85,6 +87,11 @@ def analyze_game_and_store_stats(game_id: int):
"SET (num_bottom_deck_risks, num_crits_lost) = (EXCLUDED.num_bottom_deck_risks, EXCLUDED.num_crits_lost)", "SET (num_bottom_deck_risks, num_crits_lost) = (EXCLUDED.num_bottom_deck_risks, EXCLUDED.num_crits_lost)",
(game_id, len(analysis.bdrs), len(analysis.lost_crits)) (game_id, len(analysis.bdrs), len(analysis.lost_crits))
) )
psycopg2.extras.execute_values(
cur,
"INSERT INTO game_outcomes (game_id, outcome) VALUES %s",
((game_id, outcome.value) for outcome in analysis.outcomes)
)
conn_manager.get_connection().commit() conn_manager.get_connection().commit()