diff --git a/scripts/seed.ts b/scripts/seed.ts index 3ae3302..ac7836c 100644 --- a/scripts/seed.ts +++ b/scripts/seed.ts @@ -49,12 +49,14 @@ async function seed() { const teamsCSV = readCSV('teams.csv'); for (const row of teamsCSV) { await db.insert(schema.teams).values({ name: row.team_name, color: row.color }); + console.log(` → Team: ${row.team_name} (${row.color})`); } // --- 2. Divisions --- const divisionsCSV = readCSV('divisions.csv'); for (const row of divisionsCSV) { await db.insert(schema.divisions).values({ name: row.div_name }); + console.log(` → Division: ${row.div_name}`); } // --- 3. Scoring Presets --- @@ -65,6 +67,7 @@ async function seed() { placement: row.placement, points: row.points }); + console.log(` → Preset ${row.preset}: placement ${row.placement} = ${row.points}pts`); } // Maps for dynamic relational lookups @@ -72,6 +75,7 @@ async function seed() { const dbDivisions = await db.select().from(schema.divisions); const teamMap = new Map(dbTeams.map((t) => [t.name, t.id])); const divisionMap = new Map(dbDivisions.map((d) => [d.name, d.id])); + const divisionNameMap = new Map([...divisionMap.entries()].map(([name, id]) => [id, name])); // --- 4. Players --- const playersCSV = readCSV('players.csv'); @@ -86,6 +90,9 @@ async function seed() { team: teamId, division: divisionId || null }); + console.log( + ` → Player: ${row.firstName} ${row.lastName} | team ${teamId} | division ${divisionId}` + ); } // --- 5. Event Types --- @@ -95,6 +102,7 @@ async function seed() { name: row.event_name, preset: row.preset }); + console.log(` → Event Type: ${row.event_name} (preset ${row.preset})`); } const dbEventTypes = await db.select().from(schema.eventTypes); @@ -121,30 +129,36 @@ async function seed() { timeCompleted: row.time_completed || null }) .returning(); + console.log(` → Registered Event [id:${inserted.id}]: ${row.event_type} | ${row.division}`); // Map the textual event name (e.g., "100m Sprint") to the generated DB ID - eventNameMap.set(row.event_type, inserted.id); + eventNameMap.set(`${row.event_type}|${row.division}`, inserted.id); } // --- 7. Registered Players --- const dbPlayers = await db.select().from(schema.players); - const playerMap = new Map(dbPlayers.map((p) => [`${p.firstName} ${p.lastName}`, p.id])); + const playerMap = new Map(dbPlayers.map((p) => [`${p.firstName} ${p.lastName}`, p])); + const registeredPlayersCSV = readCSV('registeredPlayers.csv'); - for (const row of registeredPlayersCSV) { - const playerId = playerMap.get(row.player_registered); - // Look up using the string event name now - const actualEventId = eventNameMap.get(row.event_registered); + const player = playerMap.get(row.player_registered); + const divisionName = divisionNameMap.get(player?.division ?? -1); + const actualEventId = eventNameMap.get(`${row.event_registered}|${divisionName}`); - if (!playerId) throw new Error(`Player "${row.player_registered}" not found`); + if (!player) throw new Error(`Player "${row.player_registered}" not found`); if (!actualEventId) - throw new Error(`Registered Event named "${row.event_registered}" not found`); + throw new Error( + `Registered Event "${row.event_registered}" for division "${divisionName}" not found` + ); await db.insert(schema.registeredPlayers).values({ - playerID: playerId, + playerID: player.id, registeredEventID: actualEventId, placement: row.player_placement || 0 }); + console.log( + ` → Registered Player: ${row.player_registered} → ${row.event_registered} (division: ${divisionName}) [eventId:${actualEventId}]` + ); } // Re-enable Foreign Key constraints now that the data is built cleanly