store player team

This commit is contained in:
Robin Appelman 2020-06-18 17:14:55 +02:00
commit 45e32f5601
3 changed files with 72 additions and 66 deletions

View file

@ -128,6 +128,7 @@ CREATE TABLE players (
log_id INTEGER NOT NULL REFERENCES logs(id), log_id INTEGER NOT NULL REFERENCES logs(id),
steam_id BIGINT NOT NULL, steam_id BIGINT NOT NULL,
name TEXT NOT NULL, name TEXT NOT NULL,
team team NOT NULL,
kills INTEGER NOT NULL, kills INTEGER NOT NULL,
deaths INTEGER NOT NULL, deaths INTEGER NOT NULL,
assists INTEGER NOT NULL, assists INTEGER NOT NULL,

View file

@ -142,10 +142,11 @@ pub async fn store_log(pool: &PgPool, id: i32, log: &NormalizedLog) -> Result<()
} }
for (steam_id, player) in &log.players { for (steam_id, player) in &log.players {
let kills = log.class_kills.get(steam_id).cloned().unwrap_or_default(); if let Some(team) = player.team {
let player_id: i32 = sqlx::query!( let kills = log.class_kills.get(steam_id).cloned().unwrap_or_default();
"INSERT INTO players (\ let player_id: i32 = sqlx::query!(
log_id, steam_id, name, kills, deaths, assists,\ "INSERT INTO players (\
log_id, steam_id, name, team, kills, deaths, assists,\
suicides, dmg, damage_taken, ubers, medigun_ubers,\ suicides, dmg, damage_taken, ubers, medigun_ubers,\
kritzkrieg_ubers, quickfix_ubers, vacinator_ubers,\ kritzkrieg_ubers, quickfix_ubers, vacinator_ubers,\
drops, medkits, medkits_hp, backstabs, headshots,\ drops, medkits, medkits_hp, backstabs, headshots,\
@ -156,63 +157,65 @@ pub async fn store_log(pool: &PgPool, id: i32, log: &NormalizedLog) -> Result<()
VALUES(\ VALUES(\
$1, $2, $3, $4, $5, $6, $7, $8, $9, $10,\ $1, $2, $3, $4, $5, $6, $7, $8, $9, $10,\
$11, $12, $13, $14, $15, $16, $17, $18, $19, $20,\ $11, $12, $13, $14, $15, $16, $17, $18, $19, $20,\
$21, $22, $23, $24, $25, $26, $27, $28, $29, $30\ $21, $22, $23, $24, $25, $26, $27, $28, $29, $30,\
$31\
)\ )\
RETURNING id", RETURNING id",
id as i32, id as i32,
u64::from(*steam_id) as i64, u64::from(*steam_id) as i64,
log.names.get(steam_id).cloned().unwrap_or_default(), log.names.get(steam_id).cloned().unwrap_or_default(),
player.kills as i32, team as TeamId,
player.deaths as i32, player.kills as i32,
player.assists as i32, player.deaths as i32,
player.suicides as i32, player.assists as i32,
player.dmg as i32, player.suicides as i32,
player.dt_real as i32, player.dmg as i32,
player.ubers as i32, player.dt_real as i32,
player player.ubers as i32,
.ubertypes player
.get(&Medigun::Medigun) .ubertypes
.copied() .get(&Medigun::Medigun)
.unwrap_or_default() as i32, .copied()
player .unwrap_or_default() as i32,
.ubertypes player
.get(&Medigun::KritzKrieg) .ubertypes
.copied() .get(&Medigun::KritzKrieg)
.unwrap_or_default() as i32, .copied()
player .unwrap_or_default() as i32,
.ubertypes player
.get(&Medigun::QuickFix) .ubertypes
.copied() .get(&Medigun::QuickFix)
.unwrap_or_default() as i32, .copied()
player .unwrap_or_default() as i32,
.ubertypes player
.get(&Medigun::Vacinator) .ubertypes
.copied() .get(&Medigun::Vacinator)
.unwrap_or_default() as i32, .copied()
player.drops as i32, .unwrap_or_default() as i32,
player.medkits as i32, player.drops as i32,
player.medkits_hp as i32, player.medkits as i32,
player.backstabs as i32, player.medkits_hp as i32,
player.headshots as i32, player.backstabs as i32,
player.heal as i32, player.headshots as i32,
heals_received.get(steam_id).copied().unwrap_or_default() as i32, player.heal as i32,
kills.scout as i32, heals_received.get(steam_id).copied().unwrap_or_default() as i32,
kills.soldier as i32, kills.scout as i32,
kills.pyro as i32, kills.soldier as i32,
kills.demoman as i32, kills.pyro as i32,
kills.heavyweapons as i32, kills.demoman as i32,
kills.engineer as i32, kills.heavyweapons as i32,
kills.medic as i32, kills.engineer as i32,
kills.sniper as i32, kills.medic as i32,
kills.spy as i32 kills.sniper as i32,
) kills.spy as i32
.fetch_one(&mut tx) )
.await? .fetch_one(&mut tx)
.id; .await?
.id;
for class in &player.class_stats { for class in &player.class_stats {
if class.class != Class::Unknown { if class.class != Class::Unknown {
let class_stat_id: i32 = sqlx::query!( let class_stat_id: i32 = sqlx::query!(
"INSERT INTO class_stats(player_id, type, time, kills, deaths, assists, dmg)\ "INSERT INTO class_stats(player_id, type, time, kills, deaths, assists, dmg)\
VALUES($1, $2, $3, $4, $5, $6, $7)\ VALUES($1, $2, $3, $4, $5, $6, $7)\
RETURNING id", RETURNING id",
@ -224,12 +227,12 @@ pub async fn store_log(pool: &PgPool, id: i32, log: &NormalizedLog) -> Result<()
class.assists as i32, class.assists as i32,
class.dmg as i32, class.dmg as i32,
) )
.fetch_one(&mut tx) .fetch_one(&mut tx)
.await? .await?
.id; .id;
for (weapon, stats) in &class.weapon { for (weapon, stats) in &class.weapon {
sqlx::query!( sqlx::query!(
"INSERT INTO player_weapon_stats(class_stat_id, weapon, kills, shots, hits, dmg)\ "INSERT INTO player_weapon_stats(class_stat_id, weapon, kills, shots, hits, dmg)\
VALUES($1, $2, $3, $4, $5, $6)", VALUES($1, $2, $3, $4, $5, $6)",
class_stat_id as i32, class_stat_id as i32,
@ -239,8 +242,9 @@ pub async fn store_log(pool: &PgPool, id: i32, log: &NormalizedLog) -> Result<()
stats.hits as i32, stats.hits as i32,
stats.dmg as i32, stats.dmg as i32,
) )
.execute(&mut tx) .execute(&mut tx)
.await?; .await?;
}
} }
} }
} }

View file

@ -55,7 +55,7 @@ pub struct Team {
#[derive(Debug, Clone, Deserialize)] #[derive(Debug, Clone, Deserialize)]
pub struct Player { pub struct Player {
pub class_stats: Vec<ClassStat>, pub class_stats: Vec<ClassStat>,
pub team: TeamId, pub team: Option<TeamId>,
pub kills: u16, pub kills: u16,
pub deaths: u16, pub deaths: u16,
pub assists: u16, pub assists: u16,
@ -122,6 +122,7 @@ pub enum RawWeaponStats {
Stats { Stats {
kills: u32, kills: u32,
dmg: u32, dmg: u32,
#[serde(default)]
avg_dmg: f32, avg_dmg: f32,
shots: u32, shots: u32,
hits: u32, hits: u32,