diff --git a/src/lib/server/globalEmitter.ts b/src/lib/server/globalEmitter.ts index 086e10b..02dc635 100644 --- a/src/lib/server/globalEmitter.ts +++ b/src/lib/server/globalEmitter.ts @@ -3,6 +3,3 @@ import { EventEmitter } from 'node:events'; // Main emitter for everything export const globalEmitter = new EventEmitter(); - -// Emitter for cache events -export const cacheEmitter = new EventEmitter(); diff --git a/src/routes/api/eventResults/+server.ts b/src/routes/api/eventResults/+server.ts index 73a2e0a..08b1d47 100644 --- a/src/routes/api/eventResults/+server.ts +++ b/src/routes/api/eventResults/+server.ts @@ -1,3 +1,9 @@ +import { globalEmitter } from '$lib/server/globalEmitter'; +import { eq } from 'drizzle-orm'; +import { db } from '$lib/server/db'; +import * as schema from '$lib/server/db/schema'; +import { getRegisteredEvents } from '$lib/server/databaseManager'; + export async function POST({ request }: any) { // Decode body let responseBody = await request.json(); @@ -7,6 +13,67 @@ export async function POST({ request }: any) { return new Response('nuh uh'); } else { console.log(JSON.stringify(responseBody)); - return new Response('ok'); + if (responseBody.eventId) { + // Get the event + let eventData = await getRegisteredEvents(responseBody.eventId); + let scoringPreset = eventData.events[0].scoringPreset; + console.log(scoringPreset); + + // make a new main ledger entry + let newLedgerEntry = await db + .insert(schema.mainLedger) + .values({ registeredEvent: responseBody.eventId }) + .returning(); + + // get the id so i can use it in the sub ledgers + let ledgerEntryId = newLedgerEntry[0].id; + + function getPoints( + scoringPreset: { placement: number; points: number }[] | string, + position: number + ): number { + const preset = + typeof scoringPreset === 'string' ? JSON.parse(scoringPreset) : scoringPreset; + return ( + preset.find((s: { placement: number; points: number }) => s.placement === position) + ?.points ?? 0 + ); + } + + // for every bracket and player + for (let bracket in responseBody.brackets) { + for (let player in responseBody.brackets[bracket].players) { + // variable fun + let currentPlayer = responseBody.brackets[bracket].players[player]; + console.log(currentPlayer); + let currentPlayerTeam = currentPlayer.teamId; + let currentPlayerPosition = currentPlayer.position; + + // If they put in a score + if (currentPlayerPosition > 0) { + let score = getPoints(scoringPreset, currentPlayerPosition); + // If their score is in the preset and they put in a score + if (currentPlayer.scores.length > 0) { + if (score > 0) { + // put the scores on the board baby + let newScoreLedgerEntry = await db + .insert(schema.scoreLedger) + .values({ ledgerID: ledgerEntryId, teamID: currentPlayerTeam, points: score }); + } + let newPlayerPlacement = await db + .update(schema.registeredPlayers) + .set({ placement: currentPlayerPosition }) + .where(eq(schema.registeredPlayers.playerID, currentPlayer.id)) + .returning(); + console.log(newPlayerPlacement); + } + } + } + } + } + // Update the frontends + globalEmitter.emit('scoreUpdate'); + // Return a resonse because + return new Response('coolsies uh'); } } diff --git a/src/routes/event/scoring/[eventId]/+page.svelte b/src/routes/event/scoring/[eventId]/+page.svelte index bc8983b..d125ffe 100644 --- a/src/routes/event/scoring/[eventId]/+page.svelte +++ b/src/routes/event/scoring/[eventId]/+page.svelte @@ -184,7 +184,7 @@ headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ eventId, - brackets: brackets.map((b) => ({ + brackets: displayBrackets.map((b) => ({ name: b.name, players: b.items.map((p, i) => ({ ...p,