feat: Implement Player Retention Analytics System (Phase 2.2)
Backend: - Add player_sessions table (migration 004) for session tracking - Implement retention calculation queries (24h/48h/72h post-wipe) - Add /api/plugin/player-event endpoint for join/leave tracking - Add /api/analytics/retention endpoint with CSV export - Track unique players, session duration, new vs returning ratio Frontend: - Create PlayerRetentionView with ECharts retention curves - Add multi-wipe comparison (last 3/6/10/20 wipes) - Display summary metrics and detailed wipe table - Add /retention route to router Plugin: - Update CorrosionCompanion.cs to send player events to new endpoint - Track player join/leave with license_key authentication Enables data-driven wipe timing optimization by answering: "What percentage of players return 24h/48h/72h after a wipe?" Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
26
backend/migrations/004_player_sessions.sql
Normal file
26
backend/migrations/004_player_sessions.sql
Normal file
@@ -0,0 +1,26 @@
|
||||
-- Player Session Tracking for Retention Analytics
|
||||
-- Phase 2 Feature: Track individual player sessions to calculate post-wipe retention
|
||||
|
||||
CREATE TABLE player_sessions (
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||
license_id UUID NOT NULL REFERENCES licenses(id) ON DELETE CASCADE,
|
||||
steam_id VARCHAR(20) NOT NULL,
|
||||
player_name VARCHAR(100) NOT NULL,
|
||||
session_start TIMESTAMPTZ NOT NULL,
|
||||
session_end TIMESTAMPTZ,
|
||||
duration_seconds INTEGER,
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
|
||||
CREATE INDEX idx_player_sessions_license ON player_sessions(license_id);
|
||||
CREATE INDEX idx_player_sessions_steam ON player_sessions(license_id, steam_id);
|
||||
CREATE INDEX idx_player_sessions_start ON player_sessions(session_start DESC);
|
||||
CREATE INDEX idx_player_sessions_steam_start ON player_sessions(license_id, steam_id, session_start DESC);
|
||||
|
||||
-- Index for retention queries (JOIN with wipe_history on date ranges)
|
||||
CREATE INDEX idx_player_sessions_license_start_range ON player_sessions(license_id, session_start)
|
||||
WHERE session_start IS NOT NULL;
|
||||
|
||||
COMMENT ON TABLE player_sessions IS 'Individual player join/leave sessions for retention analytics';
|
||||
COMMENT ON COLUMN player_sessions.duration_seconds IS 'Calculated when session_end is set (session_end - session_start)';
|
||||
COMMENT ON INDEX idx_player_sessions_steam_start IS 'Optimizes "last session for steam_id" queries when player leaves';
|
||||
Reference in New Issue
Block a user