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:
Vantz Stockwell
2026-02-15 14:23:21 -05:00
parent cef89ade18
commit f29524e633
9 changed files with 1020 additions and 12 deletions

View File

@@ -129,6 +129,8 @@ async fn main() -> anyhow::Result<()> {
.nest("/api/admin", api::admin::router())
.nest("/api/ws", api::ws::router())
.nest("/api/analytics", api::analytics::router())
.nest("/api/plugin", api::plugin::router())
.nest("/api/settings", api::settings::router())
.layer(cors)
.layer(TraceLayer::new_for_http())
.with_state(state);