diff --git a/src/lib/server/databaseManager.ts b/src/lib/server/databaseManager.ts index 0c01b01..8544a27 100644 --- a/src/lib/server/databaseManager.ts +++ b/src/lib/server/databaseManager.ts @@ -230,6 +230,81 @@ export async function getRegisteredEventsWithPlayers(eventId?: number) { return fullEventList; } +export async function getPlayerEvents(playerId: number) { + const registrations = await getPlayerRegistrations(playerId); + if (registrations.length === 0) return []; + + const events = await Promise.all( + registrations.map(async (reg) => { + const [event] = await db + .select() + .from(schema.registeredEventsView) + .where(eq(schema.registeredEventsView.eventId, reg.eventId)); + + if (!event) return null; + + let awardedPoints = 0; + if (event.scorePreset && reg.placement > 0) { + const [pointsRow] = await db + .select() + .from(schema.scoringPresets) + .where( + and( + eq(schema.scoringPresets.presetID, event.scorePreset), + eq(schema.scoringPresets.placement, reg.placement) + ) + ); + if (pointsRow) awardedPoints = pointsRow.points; + } + + const results = await db + .select() + .from(schema.registeredResults) + .where(eq(schema.registeredResults.registeredPlayerId, reg.registeredPlayerId)); + + let winnerInfo: { name: string; color: string; points: number } | null = null; + if (event.winner) { + const teamData = await getTeams(event.winner); + winnerInfo = teamData.teams[0] || null; + } + + let unit = ''; + if (event.resultPreset) { + const { resultPresets } = await getResultPreset(event.resultPreset); + if (resultPresets.length > 0) { + unit = resultPresets[0].unit; + } + } + + return { + id: reg.eventId, + name: reg.eventName, + division: event.division, + state: event.state, + completed: event.timeCompleted || 0, + winner: winnerInfo, + bracket: reg.bracket, + placement: reg.placement, + points: awardedPoints, + unit, + results: results.map((r) => ({ + index: r.resultIndex, + result: r.result + })) + }; + }) + ); + + return events + .filter((e) => e !== null) + .sort((a, b) => { + if (a.completed && b.completed) return b.completed - a.completed; + if (a.completed) return -1; + if (b.completed) return 1; + return b.id - a.id; + }); +} + export async function getLedgerEntries(limit: number | 'all' = 100) { let query = db .select({ diff --git a/src/routes/api/playerEvents/[playerId]/+server.ts b/src/routes/api/playerEvents/[playerId]/+server.ts new file mode 100644 index 0000000..0451737 --- /dev/null +++ b/src/routes/api/playerEvents/[playerId]/+server.ts @@ -0,0 +1,20 @@ +import { getPlayerEvents } from '$lib/server/databaseManager'; +import { globalEmitter } from '$lib/server/globalEmitter'; +import { generateEndpoint } from '$lib/server/endpoint'; + +export async function GET({ params, request }) { + const playerId = parseInt(params.playerId); + const endpoint = generateEndpoint(async (enqueue) => { + let eventList = async () => { + let events = await getPlayerEvents(playerId); + enqueue(events); + }; + eventList(); + globalEmitter.on('eventUpdate', eventList); + + return () => { + globalEmitter.off('eventUpdate', eventList); + }; + }, request); + return (await endpoint).response; +} diff --git a/src/routes/stats/player/[playerId]/+page.server.ts b/src/routes/stats/player/[playerId]/+page.server.ts index bfe6dd4..1836982 100644 --- a/src/routes/stats/player/[playerId]/+page.server.ts +++ b/src/routes/stats/player/[playerId]/+page.server.ts @@ -1,14 +1,14 @@ -import { getPlayerInfo } from '$lib/server/databaseManager'; +import { getPlayerInfo, getPlayerEvents } from '$lib/server/databaseManager'; import type { PageServerLoad } from './$types'; -// export const load: PageServerLoad = async ({ params }) => { -// return { -// data: await getPlayerInfo(parseInt(params.playerId)) -// }; -// }; - export const load: PageServerLoad = async ({ params }) => { + const playerId = parseInt(params.playerId); + const [playerInfo, playerEvents] = await Promise.all([ + getPlayerInfo(playerId), + getPlayerEvents(playerId) + ]); return { - playerInfo: getPlayerInfo(parseInt(params.playerId)) + playerInfo, + playerEvents }; }; diff --git a/src/routes/stats/player/[playerId]/+page.svelte b/src/routes/stats/player/[playerId]/+page.svelte index e6ff680..2215539 100644 --- a/src/routes/stats/player/[playerId]/+page.svelte +++ b/src/routes/stats/player/[playerId]/+page.svelte @@ -1,7 +1,29 @@ -{#await data.playerInfo} -
Events
+ +