2.0.0-rc2: Achievements Refactored & Admin improved.

This commit is contained in:
2026-08-09 01:34:20 +08:00
parent 3874bf57a9
commit 63a0751aba
29 changed files with 2143 additions and 355 deletions
+57
View File
@@ -587,6 +587,61 @@ ON dm_player_awards(steam_id_64, period_start DESC);
CREATE INDEX IF NOT EXISTS idx_player_awards_period
ON dm_player_awards(award_type, period_start DESC);
-- ============================================================================
-- Discovery Mart: Data-driven fun facts, both positive and negative
-- ============================================================================
CREATE TABLE IF NOT EXISTS dm_discovery_insights (
insight_key TEXT PRIMARY KEY,
steam_id_64 TEXT,
tone TEXT NOT NULL
CHECK (tone IN ('positive', 'negative', 'fun')),
category TEXT NOT NULL,
title TEXT NOT NULL,
description TEXT NOT NULL,
metric_label TEXT,
metric_value REAL,
metric_unit TEXT,
match_id TEXT,
evidence_json TEXT NOT NULL DEFAULT '{}',
display_order INTEGER NOT NULL DEFAULT 0,
last_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
);
CREATE INDEX IF NOT EXISTS idx_discovery_tone_order
ON dm_discovery_insights(tone, display_order, insight_key);
CREATE INDEX IF NOT EXISTS idx_discovery_player
ON dm_discovery_insights(steam_id_64, tone);
-- ============================================================================
-- Medal Mart: Gold/silver/bronze by map and ELO segment
-- ============================================================================
CREATE TABLE IF NOT EXISTS dm_performance_medals (
dimension_type TEXT NOT NULL
CHECK (dimension_type IN ('map', 'elo')),
dimension_key TEXT NOT NULL,
dimension_label TEXT NOT NULL,
medal_rank INTEGER NOT NULL CHECK (medal_rank BETWEEN 1 AND 3),
medal_tier TEXT NOT NULL
CHECK (medal_tier IN ('gold', 'silver', 'bronze')),
steam_id_64 TEXT NOT NULL,
matches INTEGER NOT NULL,
wins INTEGER NOT NULL,
win_rate REAL,
avg_rating REAL,
avg_kd REAL,
avg_adr REAL,
sample_reliable BOOLEAN NOT NULL DEFAULT 0,
last_updated TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (dimension_type, dimension_key, medal_rank)
);
CREATE INDEX IF NOT EXISTS idx_performance_medals_player
ON dm_performance_medals(steam_id_64, dimension_type, medal_rank);
CREATE INDEX IF NOT EXISTS idx_performance_medals_dimension
ON dm_performance_medals(dimension_type, dimension_key, medal_rank);
-- ============================================================================
-- Schema Summary
-- ============================================================================
@@ -609,4 +664,6 @@ ON dm_player_awards(award_type, period_start DESC);
-- dm_player_record_events: Historical record-breaking moments
-- dm_team_season_stats: Calendar season team summaries
-- dm_player_awards: Daily/weekly/monthly/quarterly/yearly awards
-- dm_discovery_insights: Positive, negative and quirky data discoveries
-- dm_performance_medals: Map and ELO-segment gold/silver/bronze medals
-- ============================================================================