proflie meta and games

This commit is contained in:
Andrei Stoica 2024-01-29 10:19:06 -05:00
parent 6c41cda563
commit 9c5a5a41ca
4 changed files with 121 additions and 3 deletions

View File

@ -7,7 +7,7 @@ BEGIN;
leetifyUserId TEXT,
ctLeetifyRating NUMERIC,
ctLeetifyRatingRounds NUMERIC,
dataSource NUMERIC,
dataSource TEXT,
elo NUMERIC,
gameFinishedAt TIMESTAMP,
gameId TEXT,

View File

@ -4,6 +4,7 @@
BEGIN;
CREATE TABLE IF NOT EXISTS data.profile_meta (
name TEXT,
steam64Id TEXT,
isCollector BOOL,
isLeetifyStaff BOOL,

View File

@ -2,7 +2,7 @@
BEGIN;
SELECT steam64Id, isCollector, isLeetifyStaff,
SELECT name, steam64Id, isCollector, isLeetifyStaff,
isProPlan, leetifyUserId, faceitNickname
FROM data.profile_meta
WHERE FALSE;

View File

@ -1,5 +1,12 @@
import psycopg2 as pg
from .leetify import Leetify
from os import environ as env
from .transform import (
meta_from_profile,
games_from_profile,
player_stats_from_game,
)
import psycopg2 as pg
from typing import Tuple
def connect():
@ -10,3 +17,113 @@ def connect():
host=env.get("POSTGRES_HOST"),
port=env.get("POSTGRES_PORT"),
)
def vals_in_order(data: dict, keys: list):
vals = [data[key] for key in keys]
return vals
def dict_to_col_val(data: dict) -> Tuple[list, list]:
cols = []
vals = []
for k, v in data.items():
cols.append(k)
vals.append(v)
return cols, vals
def dict_to_sql_str(data: dict) -> Tuple[str, str]:
cols, vals = dict_to_col_val(data)
vals = map(str, vals)
cols = ", ".join(cols)
vals = ", ".join(vals)
return cols, vals
def extract_profile_meta(id, api=Leetify(), conn=None):
if not conn:
conn = connect()
cols = [
"name",
"steam64Id",
"isCollector",
"isLeetifyStaff",
"isProPlan",
"leetifyUserId",
"faceitNickname",
]
profile = api.get_profile(id)
meta = meta_from_profile(profile)
vals = vals_in_order(meta, cols)
with conn.cursor() as curs:
sql = f"""
INSERT INTO data.profile_meta ({', '.join(cols)})
VALUES ({', '.join(['%s'] * len(vals))});
"""
curs.execute(sql, vals)
conn.commit()
def extract_profile_games(profile, conn=None):
if not conn:
conn = connect()
cols = [
"leetifyUserId",
"ctLeetifyRating",
"ctLeetifyRatingRounds",
"dataSource",
"elo",
"gameFinishedAt",
"gameId",
"isCs2",
"mapName",
"matchResult",
"scores",
"skillLevel",
"tLeetifyRating",
"tLeetifyRatingRounds",
"deaths",
"hasBannedPlayer",
"kills",
"partySize",
]
games = games_from_profile(profile)
games = map(lambda game: vals_in_order(game, cols), games)
with conn.cursor() as curs:
curs.executemany(
f"""
INSERT into data.profile_game ({', '.join(cols)})
VALUES ({', '.join(['%s'] * len(cols))});
""",
games,
)
conn.commit()
def extract_player_stats(game, conn=None):
if not conn:
conn = connect()
stats = player_stats_from_game(game)
games = map(dict_to_sql_str, stats)
with conn.cursor() as curs:
for (
cols,
vals,
) in games:
curs.execute(
"""INSERT INTO data.player_stats (%s)
VALUES (%s);""",
(cols, vals),
)
conn.commit()