updating the scores works now yayyy

but also the database is shit so imma rewrite it lol
This commit is contained in:
2026-05-22 16:27:01 +01:00
parent fdfbd4c7c7
commit b4611d262b
6 changed files with 248 additions and 32 deletions

View File

@@ -72,7 +72,7 @@ export const ledger = sqliteTable('ledger', {
.default(sql`(unixepoch())`),
type: text('type').notNull().default('event'),
event: integer('event').references(() => events.id),
scorer: text('scorer').references(() => scorers.id)
scorer: integer('scorer').references(() => scorers.id)
});
export const ledgerScores = sqliteTable('ledgerScores', {
@@ -99,3 +99,22 @@ export const teamScoresView = sqliteView('teamScoresView').as((qb) => {
.leftJoin(ledgerScores, eq(teams.id, ledgerScores.player))
.groupBy(teams.id);
});
export const playerDetailsView = sqliteView('playerDetailsView').as((qb) => {
return qb
.select({
playerId: players.id,
firstName: players.firstName,
lastName: players.lastName,
teamID: teams.id,
teamName: teams.name,
teamColor: teams.color,
divisionId: divisions.id,
eventId: events.id
})
.from(players)
.innerJoin(teams, eq(players.team, teams.id))
.innerJoin(divisions, eq(players.division, divisions.id))
.leftJoin(eventAttributions, eq(players.id, eventAttributions.playerID))
.leftJoin(events, eq(eventAttributions.eventID, events.id));
});

View File

@@ -0,0 +1,64 @@
import { EventEmitter } from 'node:events';
import { db } from '$lib/server/db';
import * as schema from '$lib/server/db/schema';
let testScore = 0;
// Emitter that emits
export const globalEmitter = new EventEmitter();
// Increment score for testing (remove ts)
const increment = () => {
testScore++;
console.log('score incremented', testScore);
globalEmitter.emit('scoreUpdate');
};
// Increment scores when there is an emit
globalEmitter.on('incrementScores', increment);
// Get teams object from database
export async function getTeams() {
const allTeams = await db.select().from(schema.teamScoresView);
return {
teams: allTeams.map((team) => ({
name: team.teamName,
color: team.teamColor,
points: team.totalPoints || testScore
}))
};
}
export async function getPlayers() {
// 1. Fetch the view records, divisions, and events all at once
const [allPlayers, allDivisions, allEvents] = await Promise.all([
db.select().from(schema.playerDetailsView),
db.select().from(schema.divisions),
db.select().from(schema.events)
]);
// 2. Build quick key/value lookup maps for IDs to names
const divisionMap = new Map(allDivisions.map((d) => [d.id, d.name]));
const eventMap = new Map(allEvents.map((e) => [e.id, e.name]));
// 3. Return your original cleanly mapped data structure
return {
teams: allPlayers.map((player) => ({
ID: player.playerId,
firstName: player.firstName,
lastName: player.lastName,
teamID: player.teamID,
teamName: player.teamName,
teamColor: player.teamColor,
// Map division name safely
divisionName: player.divisionId
? divisionMap.get(player.divisionId) || 'Unknown Division'
: 'No Division',
// Map event name safely (fixing the team name leak!)
eventName: player.eventId ? eventMap.get(player.eventId) || 'No Event' : 'No Event',
eventID: player.eventId
}))
};
}