ai generated solutions to our ai generated problems

This commit is contained in:
Heidi
2026-06-17 23:43:00 +01:00
parent 08b6d01fc8
commit dbac05fb4d
2 changed files with 67 additions and 21 deletions
+54 -6
View File
@@ -1162,8 +1162,24 @@ fn games_for(conn: &Connection, team_name: &str) -> Result<Vec<GameRow>, ApiErro
COALESCE(SUM(p.missile_evades), 0), COALESCE(SUM(p.missile_evades), 0),
COALESCE(SUM(p.shell_interceptions), 0), COALESCE(SUM(p.shell_interceptions), 0),
COALESCE(SUM(p.team_kills_stat), 0), COALESCE(SUM(p.team_kills_stat), 0),
m.winning_slot, (SELECT pg.team_name
m.losing_slot FROM player_games_hist pg
WHERE pg.session_id = p.session_id
AND pg.team_name IS NOT NULL
AND pg.team_name != ''
AND pg.victor_bool = 'Win'
GROUP BY pg.team_name COLLATE NOCASE
ORDER BY COUNT(DISTINCT pg.UID) DESC, pg.team_name COLLATE NOCASE
LIMIT 1),
(SELECT pg.team_name
FROM player_games_hist pg
WHERE pg.session_id = p.session_id
AND pg.team_name IS NOT NULL
AND pg.team_name != ''
AND pg.victor_bool = 'Loss'
GROUP BY pg.team_name COLLATE NOCASE
ORDER BY COUNT(DISTINCT pg.UID) DESC, pg.team_name COLLATE NOCASE
LIMIT 1)
FROM player_games_hist p FROM player_games_hist p
LEFT JOIN match_summary m ON m.session_id = p.session_id LEFT JOIN match_summary m ON m.session_id = p.session_id
WHERE p.team_name = ?1 COLLATE NOCASE WHERE p.team_name = ?1 COLLATE NOCASE
@@ -1240,8 +1256,24 @@ fn recent_games_for(conn: &Connection, limit: i64) -> Result<Vec<GameRow>, ApiEr
COALESCE(SUM(p.missile_evades), 0), COALESCE(SUM(p.missile_evades), 0),
COALESCE(SUM(p.shell_interceptions), 0), COALESCE(SUM(p.shell_interceptions), 0),
COALESCE(SUM(p.team_kills_stat), 0), COALESCE(SUM(p.team_kills_stat), 0),
m.winning_slot, (SELECT pg.team_name
m.losing_slot FROM player_games_hist pg
WHERE pg.session_id = r.session_id
AND pg.team_name IS NOT NULL
AND pg.team_name != ''
AND pg.victor_bool = 'Win'
GROUP BY pg.team_name COLLATE NOCASE
ORDER BY COUNT(DISTINCT pg.UID) DESC, pg.team_name COLLATE NOCASE
LIMIT 1),
(SELECT pg.team_name
FROM player_games_hist pg
WHERE pg.session_id = r.session_id
AND pg.team_name IS NOT NULL
AND pg.team_name != ''
AND pg.victor_bool = 'Loss'
GROUP BY pg.team_name COLLATE NOCASE
ORDER BY COUNT(DISTINCT pg.UID) DESC, pg.team_name COLLATE NOCASE
LIMIT 1)
FROM recent r FROM recent r
JOIN player_games_hist p JOIN player_games_hist p
ON p.session_id = r.session_id AND p.team_name = r.team_name COLLATE NOCASE ON p.session_id = r.session_id AND p.team_name = r.team_name COLLATE NOCASE
@@ -1303,8 +1335,24 @@ fn game_for(conn: &Connection, session_id: &str) -> Result<Option<GameRow>, ApiE
COALESCE(SUM(p.missile_evades), 0), COALESCE(SUM(p.missile_evades), 0),
COALESCE(SUM(p.shell_interceptions), 0), COALESCE(SUM(p.shell_interceptions), 0),
COALESCE(SUM(p.team_kills_stat), 0), COALESCE(SUM(p.team_kills_stat), 0),
m.winning_slot, (SELECT pg.team_name
m.losing_slot FROM player_games_hist pg
WHERE pg.session_id = p.session_id
AND pg.team_name IS NOT NULL
AND pg.team_name != ''
AND pg.victor_bool = 'Win'
GROUP BY pg.team_name COLLATE NOCASE
ORDER BY COUNT(DISTINCT pg.UID) DESC, pg.team_name COLLATE NOCASE
LIMIT 1),
(SELECT pg.team_name
FROM player_games_hist pg
WHERE pg.session_id = p.session_id
AND pg.team_name IS NOT NULL
AND pg.team_name != ''
AND pg.victor_bool = 'Loss'
GROUP BY pg.team_name COLLATE NOCASE
ORDER BY COUNT(DISTINCT pg.UID) DESC, pg.team_name COLLATE NOCASE
LIMIT 1)
FROM player_games_hist p FROM player_games_hist p
LEFT JOIN match_summary m ON m.session_id = p.session_id LEFT JOIN match_summary m ON m.session_id = p.session_id
WHERE p.session_id = ?1 WHERE p.session_id = ?1
+13 -15
View File
@@ -110,8 +110,8 @@ function formatDate(timestamp) {
} }
function gameParticipants(game) { function gameParticipants(game) {
const winner = game?.winning_team || '' const winner = displayTeamName(game?.winning_team)
const loser = game?.losing_team || '' const loser = displayTeamName(game?.losing_team)
if (winner || loser) { if (winner || loser) {
return [ return [
@@ -131,6 +131,11 @@ function gameParticipants(game) {
] ]
} }
function displayTeamName(value) {
const name = String(value || '').trim()
return /^\d+$/.test(name) ? '' : name
}
function ParticipantNames({ participants }) { function ParticipantNames({ participants }) {
if (!participants.length) { if (!participants.length) {
return <p className="truncate text-sm font-semibold text-text-soft">Participants unknown</p> return <p className="truncate text-sm font-semibold text-text-soft">Participants unknown</p>
@@ -2390,8 +2395,6 @@ function RecentGamesSection({ live, matches, navigate }) {
</p> </p>
</div> </div>
<div className="mt-3 flex flex-wrap gap-2 text-xs text-text-soft"> <div className="mt-3 flex flex-wrap gap-2 text-xs text-text-soft">
<span>{formatNumber(match.stats?.ground_kills)} ground</span>
<span>{formatNumber(match.stats?.air_kills)} air</span>
<span>{formatNumber(match.stats?.deaths)} deaths</span> <span>{formatNumber(match.stats?.deaths)} deaths</span>
</div> </div>
</button> </button>
@@ -2786,8 +2789,8 @@ function GamePage({ gameId, navigate }) {
{game ? ( {game ? (
<div className="mt-6 grid gap-5 sm:grid-cols-2 xl:grid-cols-4"> <div className="mt-6 grid gap-5 sm:grid-cols-2 xl:grid-cols-4">
<Stat label="Players" value={formatNumber(game.player_count)} /> <Stat label="Players" value={formatNumber(game.player_count)} />
<Stat label="Ground" value={formatNumber(game.stats?.ground_kills)} /> <Stat label="Assists" value={formatNumber(game.stats?.assists)} />
<Stat label="Air" value={formatNumber(game.stats?.air_kills)} /> <Stat label="Score" value={formatNumber(game.stats?.score)} />
<Stat label="Deaths" value={formatNumber(game.stats?.deaths)} /> <Stat label="Deaths" value={formatNumber(game.stats?.deaths)} />
</div> </div>
) : null} ) : null}
@@ -2806,7 +2809,7 @@ function GamePage({ gameId, navigate }) {
const won = String(participant.result || '').toLowerCase() === 'win' const won = String(participant.result || '').toLowerCase() === 'win'
return ( return (
<button <button
className="grid w-full gap-4 border-b border-surface px-5 py-4 text-left transition hover:bg-surface md:grid-cols-[1fr_repeat(5,auto)] md:items-center" className="grid w-full gap-4 border-b border-surface px-5 py-4 text-left transition hover:bg-surface md:grid-cols-[1fr_repeat(4,auto)] md:items-center"
key={participant.team_name} key={participant.team_name}
onClick={() => navigate(teamPath(participant.team_name))} onClick={() => navigate(teamPath(participant.team_name))}
type="button" type="button"
@@ -2815,9 +2818,8 @@ function GamePage({ gameId, navigate }) {
{participant.team_name} {participant.team_name}
</p> </p>
<p className="text-sm">{formatNumber(participant.player_count)} players</p> <p className="text-sm">{formatNumber(participant.player_count)} players</p>
<p className="text-sm">{formatNumber(participant.stats?.ground_kills)} ground</p>
<p className="text-sm">{formatNumber(participant.stats?.air_kills)} air</p>
<p className="text-sm">{formatNumber(participant.stats?.assists)} assists</p> <p className="text-sm">{formatNumber(participant.stats?.assists)} assists</p>
<p className="text-sm">{formatNumber(participant.stats?.score)} score</p>
<p className="text-sm">{formatNumber(participant.stats?.deaths)} deaths</p> <p className="text-sm">{formatNumber(participant.stats?.deaths)} deaths</p>
</button> </button>
) )
@@ -2884,7 +2886,7 @@ function BattleResults({ games, navigate, status }) {
<div className="max-h-[560px] overflow-auto"> <div className="max-h-[560px] overflow-auto">
{games.map((game) => ( {games.map((game) => (
<button <button
className="grid w-full gap-4 border-b border-surface px-5 py-4 text-left transition hover:bg-surface md:grid-cols-[1fr_minmax(10rem,0.8fr)_repeat(5,auto)] md:items-center" className="grid w-full gap-4 border-b border-surface px-5 py-4 text-left transition hover:bg-surface md:grid-cols-[1fr_minmax(10rem,0.8fr)_repeat(3,auto)] md:items-center"
key={game.session_id} key={game.session_id}
onClick={() => navigate(gamePath(game.session_id))} onClick={() => navigate(gamePath(game.session_id))}
type="button" type="button"
@@ -2897,8 +2899,6 @@ function BattleResults({ games, navigate, status }) {
</div> </div>
<ParticipantNames participants={gameParticipants(game)} /> <ParticipantNames participants={gameParticipants(game)} />
<p className="text-sm">{formatNumber(game.player_count)} players</p> <p className="text-sm">{formatNumber(game.player_count)} players</p>
<p className="text-sm">{formatNumber(game.stats?.ground_kills)} ground</p>
<p className="text-sm">{formatNumber(game.stats?.air_kills)} air</p>
<p className="text-sm">{formatNumber(game.stats?.assists)} assists</p> <p className="text-sm">{formatNumber(game.stats?.assists)} assists</p>
<p className="text-sm">{formatNumber(game.stats?.deaths)} deaths</p> <p className="text-sm">{formatNumber(game.stats?.deaths)} deaths</p>
</button> </button>
@@ -2926,7 +2926,7 @@ function BattleLogsPage({ live, matches, navigate }) {
<div className="overflow-hidden rounded-lg border border-border bg-fury-white shadow-sm"> <div className="overflow-hidden rounded-lg border border-border bg-fury-white shadow-sm">
{matches.map((match) => ( {matches.map((match) => (
<button <button
className="grid w-full gap-4 border-b border-surface px-5 py-4 text-left transition hover:bg-surface md:grid-cols-[1fr_minmax(10rem,0.8fr)_repeat(4,auto)] md:items-center" className="grid w-full gap-4 border-b border-surface px-5 py-4 text-left transition hover:bg-surface md:grid-cols-[1fr_minmax(10rem,0.8fr)_repeat(2,auto)] md:items-center"
key={match.session_id} key={match.session_id}
onClick={() => navigate(gamePath(match.session_id))} onClick={() => navigate(gamePath(match.session_id))}
type="button" type="button"
@@ -2939,8 +2939,6 @@ function BattleLogsPage({ live, matches, navigate }) {
</div> </div>
<ParticipantNames participants={gameParticipants(match)} /> <ParticipantNames participants={gameParticipants(match)} />
<p className="text-sm">{formatNumber(match.player_count)} players</p> <p className="text-sm">{formatNumber(match.player_count)} players</p>
<p className="text-sm">{formatNumber(match.stats?.ground_kills)} ground</p>
<p className="text-sm">{formatNumber(match.stats?.air_kills)} air</p>
<p className="text-sm">{formatNumber(match.stats?.deaths)} deaths</p> <p className="text-sm">{formatNumber(match.stats?.deaths)} deaths</p>
</button> </button>
))} ))}