Add canonical ID pipeline and fix UUID consistency for CloudKit sync

- Add local canonicalization pipeline (stadiums, teams, games) that generates
  deterministic canonical IDs before CloudKit upload
- Fix CanonicalSyncService to use deterministic UUIDs from canonical IDs
  instead of random UUIDs from CloudKit records
- Add SyncStadium/SyncTeam/SyncGame types to CloudKitService that preserve
  canonical ID relationships during sync
- Add canonical ID field keys to CKModels for reading from CloudKit records
- Bundle canonical JSON files (stadiums_canonical, teams_canonical,
  games_canonical, stadium_aliases) for consistent bootstrap data
- Update BootstrapService to prefer canonical format files over legacy format

This ensures all entities use consistent deterministic UUIDs derived from
their canonical IDs, preventing duplicate records when syncing CloudKit
data with bootstrapped local data.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Trey t
2026-01-09 10:30:09 -06:00
parent 1ee47df53e
commit 7efcea7bd4
31 changed files with 128868 additions and 282 deletions

View File

@@ -554,7 +554,6 @@ nba_202526_lal_sas_0107,NBA,2025-26,2026-01-07,9:30p,San Antonio Spurs,Los Angel
nba_202526_mil_gsw_0107,NBA,2025-26,2026-01-07,10:00p,Golden State Warriors,Milwaukee Bucks,GSW,MIL,Chase Center,basketball-reference.com,False,
nba_202526_hou_por_0107,NBA,2025-26,2026-01-07,10:00p,Portland Trail Blazers,Houston Rockets,POR,HOU,Moda Center,basketball-reference.com,False,
nba_202526_ind_cho_0108,NBA,2025-26,2026-01-08,7:00p,Charlotte Hornets,Indiana Pacers,CHO,IND,Spectrum Center,basketball-reference.com,False,
nba_202526_mia_chi_0108,NBA,2025-26,2026-01-08,8:00p,Chicago Bulls,Miami Heat,CHI,MIA,United Center,basketball-reference.com,False,
nba_202526_cle_min_0108,NBA,2025-26,2026-01-08,8:00p,Minnesota Timberwolves,Cleveland Cavaliers,MIN,CLE,Target Center,basketball-reference.com,False,
nba_202526_dal_uta_0108,NBA,2025-26,2026-01-08,9:00p,Utah Jazz,Dallas Mavericks,UTA,DAL,Delta Center,basketball-reference.com,False,
nba_202526_tor_bos_0109,NBA,2025-26,2026-01-09,7:00p,Boston Celtics,Toronto Raptors,BOS,TOR,TD Garden,basketball-reference.com,False,
@@ -612,9 +611,9 @@ nba_202526_uta_dal_0115,NBA,2025-26,2026-01-15,8:30p,Dallas Mavericks,Utah Jazz,
nba_202526_nyk_gsw_0115,NBA,2025-26,2026-01-15,10:00p,Golden State Warriors,New York Knicks,GSW,NYK,Chase Center,basketball-reference.com,False,
nba_202526_atl_por_0115,NBA,2025-26,2026-01-15,10:00p,Portland Trail Blazers,Atlanta Hawks,POR,ATL,Moda Center,basketball-reference.com,False,
nba_202526_cho_lal_0115,NBA,2025-26,2026-01-15,10:30p,Los Angeles Lakers,Charlotte Hornets,LAL,CHO,Crypto.com Arena,basketball-reference.com,False,
nba_202526_chi_brk_0116,NBA,2025-26,2026-01-16,7:00p,Brooklyn Nets,Chicago Bulls,BRK,CHI,Barclays Center,basketball-reference.com,False,
nba_202526_nop_ind_0116,NBA,2025-26,2026-01-16,7:00p,Indiana Pacers,New Orleans Pelicans,IND,NOP,Gainbridge Fieldhouse,basketball-reference.com,False,
nba_202526_cle_phi_0116,NBA,2025-26,2026-01-16,7:00p,Philadelphia 76ers,Cleveland Cavaliers,PHI,CLE,Xfinity Mobile Arena,basketball-reference.com,False,
nba_202526_chi_brk_0116,NBA,2025-26,2026-01-16,7:30p,Brooklyn Nets,Chicago Bulls,BRK,CHI,Barclays Center,basketball-reference.com,False,
nba_202526_lac_tor_0116,NBA,2025-26,2026-01-16,7:30p,Toronto Raptors,Los Angeles Clippers,TOR,LAC,Scotiabank Arena,basketball-reference.com,False,
nba_202526_min_hou_0116,NBA,2025-26,2026-01-16,9:30p,Houston Rockets,Minnesota Timberwolves,HOU,MIN,Toyota Center,basketball-reference.com,False,
nba_202526_was_sac_0116,NBA,2025-26,2026-01-16,10:00p,Sacramento Kings,Washington Wizards,SAC,WAS,Golden 1 Center,basketball-reference.com,False,
@@ -722,9 +721,9 @@ nba_202526_sac_bos_0130,NBA,2025-26,2026-01-30,7:30p,Boston Celtics,Sacramento K
nba_202526_mem_nop_0130,NBA,2025-26,2026-01-30,7:30p,New Orleans Pelicans,Memphis Grizzlies,NOP,MEM,Smoothie King Center,basketball-reference.com,False,
nba_202526_por_nyk_0130,NBA,2025-26,2026-01-30,7:30p,New York Knicks,Portland Trail Blazers,NYK,POR,Madison Square Garden (IV),basketball-reference.com,False,
nba_202526_chi_mia_0130,NBA,2025-26,2026-01-30,8:00p,Miami Heat,Chicago Bulls,MIA,CHI,Kaseya Center,basketball-reference.com,False,
nba_202526_lac_den_0130,NBA,2025-26,2026-01-30,9:00p,Denver Nuggets,Los Angeles Clippers,DEN,LAC,Ball Arena,basketball-reference.com,False,
nba_202526_cle_pho_0130,NBA,2025-26,2026-01-30,9:00p,Phoenix Suns,Cleveland Cavaliers,PHO,CLE,Mortgage Matchup Center,basketball-reference.com,False,
nba_202526_brk_uta_0130,NBA,2025-26,2026-01-30,9:30p,Utah Jazz,Brooklyn Nets,UTA,BRK,Delta Center,basketball-reference.com,False,
nba_202526_lac_den_0130,NBA,2025-26,2026-01-30,10:00p,Denver Nuggets,Los Angeles Clippers,DEN,LAC,Ball Arena,basketball-reference.com,False,
nba_202526_det_gsw_0130,NBA,2025-26,2026-01-30,10:00p,Golden State Warriors,Detroit Pistons,GSW,DET,Chase Center,basketball-reference.com,False,
nba_202526_sas_cho_0131,NBA,2025-26,2026-01-31,3:00p,Charlotte Hornets,San Antonio Spurs,CHO,SAS,Spectrum Center,basketball-reference.com,False,
nba_202526_atl_ind_0131,NBA,2025-26,2026-01-31,7:00p,Indiana Pacers,Atlanta Hawks,IND,ATL,Gainbridge Fieldhouse,basketball-reference.com,False,
@@ -2707,7 +2706,7 @@ mlb_2026_tb_bos_0718,MLB,2026,2026-07-18,20:10,Boston Red Sox,Tampa Bay Rays,BOS
mlb_2026_tex_atl_0718,MLB,2026,2026-07-18,20:10,Atlanta Braves,Texas Rangers,ATL,TEX,Truist Park,statsapi.mlb.com,False,
mlb_2026_mia_mil_0718,MLB,2026,2026-07-18,20:10,Milwaukee Brewers,Miami Marlins,MIL,MIA,American Family Field,statsapi.mlb.com,False,
mlb_2026_sf_sea_0718,MLB,2026,2026-07-18,23:15,Seattle Mariners,San Francisco Giants,SEA,SF,T-Mobile Park,statsapi.mlb.com,False,
mlb_2026_lad_nyy_0718,MLB,2026,2026-07-18,23:15,New York Yankees,Los Angeles Dodgers,NYY,LAD,Yankee Stadium,statsapi.mlb.com,False,
mlb_2026_lad_nyy_0718,MLB,2026,2026-07-18,00:08,New York Yankees,Los Angeles Dodgers,NYY,LAD,Yankee Stadium,statsapi.mlb.com,False,
mlb_2026_wsh_ath_0718,MLB,2026,2026-07-18,02:05,Athletics,Washington Nationals,ATH,WSH,Sutter Health Park,statsapi.mlb.com,False,
mlb_2026_det_laa_0718,MLB,2026,2026-07-18,02:07,Los Angeles Angels,Detroit Tigers,LAA,DET,Angel Stadium,statsapi.mlb.com,False,
mlb_2026_pit_cle_0718,MLB,2026,2026-07-18,07:33,Cleveland Guardians,Pittsburgh Pirates,CLE,PIT,Progressive Field,statsapi.mlb.com,False,
@@ -3520,7 +3519,7 @@ mlb_2026_mil_pit_0917,MLB,2026,2026-09-17,16:35,Pittsburgh Pirates,Milwaukee Bre
mlb_2026_lad_cin_0917,MLB,2026,2026-09-17,16:40,Cincinnati Reds,Los Angeles Dodgers,CIN,LAD,Great American Ball Park,statsapi.mlb.com,False,
mlb_2026_ath_tb_0917,MLB,2026,2026-09-17,17:10,Tampa Bay Rays,Athletics,TB,ATH,Tropicana Field,statsapi.mlb.com,False,
mlb_2026_sd_col_0917,MLB,2026,2026-09-17,19:10,Colorado Rockies,San Diego Padres,COL,SD,Coors Field,statsapi.mlb.com,False,
mlb_2026_phi_nym_0917,MLB,2026,2026-09-17,23:10,New York Mets,Philadelphia Phillies,NYM,PHI,Citi Field,statsapi.mlb.com,False,
mlb_2026_phi_nym_0917,MLB,2026,2026-09-17,23:15,New York Mets,Philadelphia Phillies,NYM,PHI,Citi Field,statsapi.mlb.com,False,
mlb_2026_det_cws_0917,MLB,2026,2026-09-17,23:40,Chicago White Sox,Detroit Tigers,CWS,DET,Rate Field,statsapi.mlb.com,False,
mlb_2026_bos_tex_0917,MLB,2026,2026-09-17,00:05,Texas Rangers,Boston Red Sox,TEX,BOS,Globe Life Field,statsapi.mlb.com,False,
mlb_2026_min_laa_0917,MLB,2026,2026-09-17,01:38,Los Angeles Angels,Minnesota Twins,LAA,MIN,Angel Stadium,statsapi.mlb.com,False,
Can't render this file because it is too large.