playerTelemetryProfile.ts 1.2 KB

123456789101112131415161718192021222324252627282930313233343536
  1. import { mergeTelemetryConfig, type TelemetryConfig } from './telemetryConfig'
  2. export interface PlayerTelemetryProfile {
  3. heartRateAge?: number
  4. restingHeartRateBpm?: number
  5. userWeightKg?: number
  6. source?: 'server' | 'device' | 'manual'
  7. updatedAt?: number
  8. }
  9. function pickTelemetryValue<T extends keyof TelemetryConfig>(
  10. key: T,
  11. activityConfig: Partial<TelemetryConfig> | null | undefined,
  12. playerProfile: PlayerTelemetryProfile | null | undefined,
  13. ): TelemetryConfig[T] | undefined {
  14. if (playerProfile && playerProfile[key] !== undefined) {
  15. return playerProfile[key] as TelemetryConfig[T]
  16. }
  17. if (activityConfig && activityConfig[key] !== undefined) {
  18. return activityConfig[key] as TelemetryConfig[T]
  19. }
  20. return undefined
  21. }
  22. export function mergeTelemetrySources(
  23. activityConfig?: Partial<TelemetryConfig> | null,
  24. playerProfile?: PlayerTelemetryProfile | null,
  25. ): TelemetryConfig {
  26. return mergeTelemetryConfig({
  27. heartRateAge: pickTelemetryValue('heartRateAge', activityConfig, playerProfile),
  28. restingHeartRateBpm: pickTelemetryValue('restingHeartRateBpm', activityConfig, playerProfile),
  29. userWeightKg: pickTelemetryValue('userWeightKg', activityConfig, playerProfile),
  30. })
  31. }