From 32c5d2af7a9f9f231d8bfd3c7f0e48fdfc3836e9 Mon Sep 17 00:00:00 2001 From: voidarc Date: Sun, 24 May 2026 15:17:48 +0100 Subject: [PATCH] added brackets and function to get them, updated data structure of players view --- scripts/seed.ts | 19 +++++++++++++++++-- src/lib/server/db/schema.ts | 10 ++++++++++ src/lib/server/eventManager.ts | 16 +++++++++++++++- 3 files changed, 42 insertions(+), 3 deletions(-) diff --git a/scripts/seed.ts b/scripts/seed.ts index ac7836c..1eb1021 100644 --- a/scripts/seed.ts +++ b/scripts/seed.ts @@ -37,6 +37,7 @@ async function seed() { await db.delete(schema.registeredEvents); await db.delete(schema.eventTypes); await db.delete(schema.scoringPresets); + await db.delete(schema.brackets); // Added cleanup for brackets await db.delete(schema.players); await db.delete(schema.divisions); await db.delete(schema.teams); @@ -59,6 +60,13 @@ async function seed() { console.log(` → Division: ${row.div_name}`); } + // --- 2.5 Brackets (Added Section) --- + const bracketsCSV = readCSV('brackets.csv'); + for (const row of bracketsCSV) { + await db.insert(schema.brackets).values({ name: row.bracket_name }); + console.log(` → Bracket: ${row.bracket_name}`); + } + // --- 3. Scoring Presets --- const scoringPresetsCSV = readCSV('scoringPresets.csv'); for (const row of scoringPresetsCSV) { @@ -73,9 +81,12 @@ async function seed() { // Maps for dynamic relational lookups const dbTeams = await db.select().from(schema.teams); const dbDivisions = await db.select().from(schema.divisions); + const dbBrackets = await db.select().from(schema.brackets); // Look up newly seeded brackets + 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])); + const bracketMap = new Map(dbBrackets.map((b) => [b.name, b.id])); // Map names to IDs // --- 4. Players --- const playersCSV = readCSV('players.csv'); @@ -109,7 +120,6 @@ async function seed() { const eventTypeMap = new Map(dbEventTypes.map((et) => [et.name, et.id])); // --- 6. Registered Events --- - // Change the Map key type to a string (the event name) const eventNameMap = new Map(); const registeredEventsCSV = readCSV('registeredEvents.csv'); @@ -145,19 +155,24 @@ async function seed() { const divisionName = divisionNameMap.get(player?.division ?? -1); const actualEventId = eventNameMap.get(`${row.event_registered}|${divisionName}`); + // Dynamic look up of the bracket row's primary key ID using the CSV text + const bracketId = bracketMap.get(row.bracket); + if (!player) throw new Error(`Player "${row.player_registered}" not found`); if (!actualEventId) throw new Error( `Registered Event "${row.event_registered}" for division "${divisionName}" not found` ); + if (!bracketId) throw new Error(`Bracket "${row.bracket}" not found in database`); await db.insert(schema.registeredPlayers).values({ playerID: player.id, registeredEventID: actualEventId, + bracket: bracketId, // Using the real relational ID instead of raw value placement: row.player_placement || 0 }); console.log( - ` → Registered Player: ${row.player_registered} → ${row.event_registered} (division: ${divisionName}) [eventId:${actualEventId}]` + ` → Registered Player: ${row.player_registered} → ${row.event_registered} (division: ${divisionName}, bracket: ${row.bracket} [id:${bracketId}]) [eventId:${actualEventId}]` ); } diff --git a/src/lib/server/db/schema.ts b/src/lib/server/db/schema.ts index 2cc1ddf..ac52d5b 100644 --- a/src/lib/server/db/schema.ts +++ b/src/lib/server/db/schema.ts @@ -22,6 +22,11 @@ export const divisions = sqliteTable('divisions', { name: text('div_name').notNull() }); +export const brackets = sqliteTable('brackets', { + id: integer('brackets_id').primaryKey({ autoIncrement: true }), + name: text('bracket_name').notNull() +}); + export const scoringPresets = sqliteTable('scoringPresets', { id: integer('scoringPresets_id').primaryKey({ autoIncrement: true }), presetID: integer('preset').notNull(), @@ -57,6 +62,9 @@ export const registeredPlayers = sqliteTable('registeredPlayers', { registeredEventID: integer('event_registered') .references(() => registeredEvents.id) .notNull(), + bracket: integer('bracket_registered') + .references(() => brackets.id) + .notNull(), placement: integer('player_placement').notNull().default(0) }); @@ -115,6 +123,7 @@ export const registeredEventPlayersView = sqliteView('registeredEventPlayersView firstName: players.firstName, lastName: players.lastName, placement: registeredPlayers.placement, + bracket: brackets.name, eventId: registeredEvents.id, eventName: eventTypes.name, teamId: teams.id, @@ -123,6 +132,7 @@ export const registeredEventPlayersView = sqliteView('registeredEventPlayersView }) .from(registeredPlayers) .innerJoin(registeredEvents, eq(registeredPlayers.registeredEventID, registeredEvents.id)) + .innerJoin(brackets, eq(registeredPlayers.bracket, brackets.id)) .innerJoin(eventTypes, eq(registeredEvents.eventType, eventTypes.id)) .innerJoin(players, eq(registeredPlayers.playerID, players.id)) .innerJoin(teams, eq(players.team, teams.id)); diff --git a/src/lib/server/eventManager.ts b/src/lib/server/eventManager.ts index fba1d2a..24a5dfd 100644 --- a/src/lib/server/eventManager.ts +++ b/src/lib/server/eventManager.ts @@ -57,13 +57,19 @@ export async function getAllRegisteredEventPlayers(eventId: number) { const eventPlayers = await db .select() .from(schema.registeredEventPlayersView) - .where(eq(schema.registeredEventPlayersView.eventId, eventId)); + .where(eq(schema.registeredEventPlayersView.eventId, eventId)) + .orderBy( + schema.registeredEventPlayersView.bracket, + schema.registeredEventPlayersView.placement, + schema.registeredEventPlayersView.teamName + ); return { eventPlayers: eventPlayers.map((players) => ({ id: players.playerId, firstName: players.firstName, lastName: players.lastName, placement: players.placement, + bracket: players.bracket, eventId: players.eventId, eventName: players.eventName, teamId: players.teamId, @@ -72,3 +78,11 @@ export async function getAllRegisteredEventPlayers(eventId: number) { })) }; } + +export async function getAllBrackets() { + const brackets = await db.select().from(schema.brackets); + + return { + brackets: brackets + }; +}