- Remove teamOwnerId from TeamStanding type (was an internal server concern, not display data) - Remove teamOwnerId from getSeasonStandings return value - Add TeamStandingWithChange interface extending TeamStanding with sevenDayRankChange/sevenDayOldRank fields - Annotate getSevenDayStandingsChange with explicit Promise<TeamStandingWithChange[]> return type - Re-export TeamStandingWithChange from models/standings.ts - Standings loader: query teams table directly for ownerIds instead of relying on teamOwnerId in standings data - Standings loader: parallelize all independent queries (standings, teams, progressionData, seasonComplete, completionPercentage) with Promise.all - Restore font-medium on StandingsTable team TableCell https://claude.ai/code/session_01EYgGnuTBaRVdBDapJRTxDZ
40 lines
947 B
TypeScript
40 lines
947 B
TypeScript
/**
|
|
* Shared types for standings that can be used in both server and client code
|
|
*/
|
|
|
|
export interface TeamStanding {
|
|
teamId: string;
|
|
teamName: string;
|
|
ownerName?: string | null;
|
|
totalPoints: number;
|
|
currentRank: number;
|
|
previousRank: number | null;
|
|
rankChange: number; // Positive = moved up, negative = moved down
|
|
placementCounts: {
|
|
first: number;
|
|
second: number;
|
|
third: number;
|
|
fourth: number;
|
|
fifth: number;
|
|
sixth: number;
|
|
seventh: number;
|
|
eighth: number;
|
|
};
|
|
participantsRemaining: number;
|
|
calculatedAt: Date;
|
|
// Phase 5.4: Expected value projections
|
|
actualPoints?: number | null;
|
|
projectedPoints?: number | null;
|
|
participantsFinished?: number | null;
|
|
}
|
|
|
|
export interface TeamStandingSnapshot {
|
|
date: Date;
|
|
rank: number;
|
|
totalPoints: number;
|
|
}
|
|
|
|
export interface TeamStandingWithChange extends TeamStanding {
|
|
sevenDayRankChange: number;
|
|
sevenDayOldRank: number | null;
|
|
}
|