Subissue of EPIC #1938 — REST API Contract-First Migration
Problem
The stats context is the most complex in the REST API. It has two endpoints (GET /stats, GET /metrics) aggregating data from 6+ tracker internal repositories across tracker-core, http-core, udp-core, udp-server, swarm-coordination-registry, and rest-api-core. The Stats DTO has ~28 fields. The Axum server injects all dependencies as multi-element state tuples.
Scope
- Define
Stats and LabeledStats DTOs (~28 fields) in rest-api-protocol
- Define
StatsQueryPort trait in rest-api-application
- Implement
StatsApiService use-case
- Implement
TrackerStatsAdapter consuming SI-30 traits (BanningStats, UdpCoreStatsRepository, UdpServerStatsRepository)
- Handle Prometheus serialization (keep as Axum transport concern — Option A)
- Rewire Axum handlers to use
StatsApiService
- Remove direct internal crate deps from
axum-rest-api-server stats wiring
Checklist
Subissue of EPIC #1938 — REST API Contract-First Migration
Problem
The
statscontext is the most complex in the REST API. It has two endpoints (GET /stats,GET /metrics) aggregating data from 6+ tracker internal repositories acrosstracker-core,http-core,udp-core,udp-server,swarm-coordination-registry, andrest-api-core. TheStatsDTO has ~28 fields. The Axum server injects all dependencies as multi-element state tuples.Scope
StatsandLabeledStatsDTOs (~28 fields) inrest-api-protocolStatsQueryPorttrait inrest-api-applicationStatsApiServiceuse-caseTrackerStatsAdapterconsuming SI-30 traits (BanningStats,UdpCoreStatsRepository,UdpServerStatsRepository)StatsApiServiceaxum-rest-api-serverstats wiringChecklist
StatsandLabeledStatsDTOs defined inrest-api-protocolStatsQueryPorttrait definedStatsApiServiceuse-case implementedTrackerStatsAdapterimplemented consuming SI-30 traits