feat: 收敛玩法运行时配置并加入故障恢复

This commit is contained in:
2026-04-01 13:04:26 +08:00
parent 1635a11780
commit 3ef841ecc7
73 changed files with 8820 additions and 2122 deletions

View File

@@ -0,0 +1,36 @@
import { mergeTelemetryConfig, type TelemetryConfig } from './telemetryConfig'
export interface PlayerTelemetryProfile {
heartRateAge?: number
restingHeartRateBpm?: number
userWeightKg?: number
source?: 'server' | 'device' | 'manual'
updatedAt?: number
}
function pickTelemetryValue<T extends keyof TelemetryConfig>(
key: T,
activityConfig: Partial<TelemetryConfig> | null | undefined,
playerProfile: PlayerTelemetryProfile | null | undefined,
): TelemetryConfig[T] | undefined {
if (playerProfile && playerProfile[key] !== undefined) {
return playerProfile[key] as TelemetryConfig[T]
}
if (activityConfig && activityConfig[key] !== undefined) {
return activityConfig[key] as TelemetryConfig[T]
}
return undefined
}
export function mergeTelemetrySources(
activityConfig?: Partial<TelemetryConfig> | null,
playerProfile?: PlayerTelemetryProfile | null,
): TelemetryConfig {
return mergeTelemetryConfig({
heartRateAge: pickTelemetryValue('heartRateAge', activityConfig, playerProfile),
restingHeartRateBpm: pickTelemetryValue('restingHeartRateBpm', activityConfig, playerProfile),
userWeightKg: pickTelemetryValue('userWeightKg', activityConfig, playerProfile),
})
}