All files / web/src/lib/practice-picker server.ts

0% Statements 0/26
0% Branches 0/1
0% Functions 0/1
0% Lines 0/26

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27                                                     
import { getPlayersWithSkillData } from '@/lib/curriculum/server'
import { metrics } from '@/lib/metrics'
import {
  createPracticePickerV1Response,
  type PracticePickerV1Response,
} from './contract'

/**
 * Load the versioned practice-picker contract for an authorized viewer.
 * Authorization and guest-link expiry are inherited from the canonical
 * parented-player listing inside getPlayersWithSkillData().
 */
export async function getPracticePickerV1Data(): Promise<PracticePickerV1Response> {
  const students = await getPlayersWithSkillData({ measurePayload: false })
  const response = createPracticePickerV1Response(students)

  // Measure the actual bounded object that crosses both the RSC and API boundaries.
  try {
    const payloadBytes = new TextEncoder().encode(JSON.stringify(response)).byteLength
    metrics.practicePicker.payloadSize.observe({ outcome: 'complete' }, payloadBytes)
  } catch (error) {
    console.error('[Practice] Failed to measure picker v1 payload size', error)
  }

  return response
}