From ed98690bb6239bc3a05592b6be6b422fe250f63b Mon Sep 17 00:00:00 2001 From: voidarc Date: Thu, 25 Jun 2026 13:12:27 +0100 Subject: [PATCH] holy shit i can start events now --- src/lib/server/databaseManager.ts | 23 ++++++++++++ src/routes/api/eventStart/+server.ts | 17 +++++++++ .../event/scoring/[eventId]/+page.svelte | 37 +++++++++++++++++-- 3 files changed, 74 insertions(+), 3 deletions(-) create mode 100644 src/routes/api/eventStart/+server.ts diff --git a/src/lib/server/databaseManager.ts b/src/lib/server/databaseManager.ts index d012b17..d418eb1 100644 --- a/src/lib/server/databaseManager.ts +++ b/src/lib/server/databaseManager.ts @@ -1,6 +1,7 @@ import { db } from '$lib/server/db'; import { eq } from 'drizzle-orm'; import * as schema from '$lib/server/db/schema'; +import { globalEmitter } from './globalEmitter'; // For page.server.ts so that it doesnt look weird before loading export async function getAllInitialInfo() { @@ -67,6 +68,28 @@ export async function getRegisteredEvents(eventId?: number) { return { events }; } +export async function startEvent(eventId: number) { + let event = await db + .select() + .from(schema.registeredEventsView) + .where(eq(schema.registeredEventsView.eventId, eventId)); + let requestedEvent = event[0]; + console.log(requestedEvent); + if (requestedEvent.state != 0) { + console.log('not startable'); + return false; + } else { + let replacedEvent = await db + .update(schema.registeredEvents) + .set({ state: 1 }) + .where(eq(schema.registeredEvents.id, requestedEvent.eventId)) + .returning(); + console.log(replacedEvent); + globalEmitter.emit('eventUpdate'); + return true; + } +} + // Get all players with an event id specified export async function getAllRegisteredEventPlayers(eventId: number) { const eventPlayers = await db diff --git a/src/routes/api/eventStart/+server.ts b/src/routes/api/eventStart/+server.ts new file mode 100644 index 0000000..d4e4757 --- /dev/null +++ b/src/routes/api/eventStart/+server.ts @@ -0,0 +1,17 @@ +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 { startEvent } from '$lib/server/databaseManager'; + +export async function POST({ request }: any) { + let responseBody = await request.json(); + + if (!responseBody) { + return new Error('send a response dummy'); + } else { + console.log(responseBody); + startEvent(responseBody.eventId); + return new Response('ok'); + } +} diff --git a/src/routes/event/scoring/[eventId]/+page.svelte b/src/routes/event/scoring/[eventId]/+page.svelte index 758b69a..f7c7ce0 100644 --- a/src/routes/event/scoring/[eventId]/+page.svelte +++ b/src/routes/event/scoring/[eventId]/+page.svelte @@ -126,7 +126,6 @@ for (let player in brackets[bracket].items) { if (parseInt(player) > highestPlayer) { highestPlayer = parseInt(player); - console.log(highestPlayer, 'high'); } } } @@ -145,6 +144,15 @@ loading = false; eventEndpoint = new EventSource('/api/registeredEvents'); + eventEndpoint.onmessage = (e) => { + const data = JSON.parse(e.data)[eventId - 1]; + console.log(data); + event = data; + brackets = data.registeredPlayers.map((b: any) => ({ + ...b, + items: [...b.items] + })); + }; }); onDestroy(() => { @@ -176,6 +184,20 @@ dropTarget = null; } + async function startEvent() { + try { + const res = await fetch('/api/eventStart', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + eventId: eventId + }) + }); + } catch { + return new Error(); + } + } + async function submitResults() { submitStatus = 'submitting'; try { @@ -216,12 +238,20 @@
- {event.name} - {event.division} - scoring + {event.name} - {event.division} - scoring {#if event.state == 1}- ONGOING + {/if}
- + {#if event.state == 0} + + {/if} @@ -293,6 +323,7 @@ { const current = [