From dff0d9441fa7c90bc94c0a023f961f50b694df98 Mon Sep 17 00:00:00 2001 From: voidarc Date: Sat, 23 May 2026 20:14:38 +0100 Subject: [PATCH] changed api names to make them more fitting, incase i want a player endpoint later --- src/routes/api/players/+server.ts | 46 -------------- src/routes/api/registeredEvents/+server.ts | 54 +++++++++++++++++ src/routes/api/registeredPlayers/+server.ts | 9 +++ src/routes/api/teams/+server.ts | 66 +++++++-------------- 4 files changed, 84 insertions(+), 91 deletions(-) delete mode 100644 src/routes/api/players/+server.ts create mode 100644 src/routes/api/registeredEvents/+server.ts create mode 100644 src/routes/api/registeredPlayers/+server.ts diff --git a/src/routes/api/players/+server.ts b/src/routes/api/players/+server.ts deleted file mode 100644 index aa75156..0000000 --- a/src/routes/api/players/+server.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { globalEmitter, getPlayers } from '$lib/server/eventManager'; - -// Expose endpoint -export async function GET() { - // expose function type to both start and cancel - let playerList: () => Promise; - - // When request recieved open a new websocket - const stream = new ReadableStream({ - // Make a new controller so I can send messages - async start(controller) { - // Function for sending messages - const enqueue = (data: any) => { - let transferdata = JSON.stringify(data); - // stringify data and add to controller queue - controller.enqueue(`data: ${transferdata}\n\n`); - }; - - // Function to grab score from database and add it to message queue - playerList = async () => { - let players = await getPlayers(); - enqueue(players); - }; - - // Update score on connection so everything is synced - enqueue(await getPlayers()); - // Update score every time the emitter emits that the score has been changed - globalEmitter.on('playerUpdate', playerList); - }, - cancel() { - // Delete the emitter listener so that the server doesnt crash - globalEmitter.off('playerUpdate', playerList); - console.log('closed'); - } - }); - - // Return a response with an eventstream mime type - return new Response(stream, { - headers: { - 'Content-Type': 'text/event-stream', - 'Cache-Control': 'no-cache', - Connection: 'keep-alive', - 'X-Accel-Buffering': 'no' - } - }); -} diff --git a/src/routes/api/registeredEvents/+server.ts b/src/routes/api/registeredEvents/+server.ts new file mode 100644 index 0000000..b50b4c0 --- /dev/null +++ b/src/routes/api/registeredEvents/+server.ts @@ -0,0 +1,54 @@ +import { + globalEmitter, + getRegisteredEvents, + getAllRegisteredEventPlayers +} from '$lib/server/eventManager'; +import { generateEndpoint } from '$lib/server/endpoint'; + +export async function GET() { + // Generate stream endpoint + const endpoint = generateEndpoint(async (enqueue) => { + const eventList = async () => { + // Get updated events from database + let newEvents = await getRegisteredEvents(); + let registeredEventList = newEvents['events']; + + let fullEventList: any[] = []; + + // For every event + for (let registeredEvent in registeredEventList) { + let event = registeredEventList[registeredEvent]; + + // Get all players for the event + let registeredPlayers = await getAllRegisteredEventPlayers(event.id); + + // Some nonsense to extract the players into a better object + let registeredPlayersVec: any[] = []; + for (let player in registeredPlayers.eventPlayers) { + let currentPlayer = registeredPlayers.eventPlayers[player]; + registeredPlayersVec.push(currentPlayer); + } + + // add registeredPlayers as part of the event object + let eventWithPlayers = { + ...event, + registeredPlayers: registeredPlayersVec + }; + // combine all of the events into one array + fullEventList.push(eventWithPlayers); + } + // Send to client + enqueue(fullEventList); + }; + + // Initial Sync + eventList(); + globalEmitter.on('eventUpdate', eventList); + + // Simply return the cleanup function here + return () => { + globalEmitter.off('eventUpdate', eventList); + }; + }); + return (await endpoint).response; +} diff --git a/src/routes/api/registeredPlayers/+server.ts b/src/routes/api/registeredPlayers/+server.ts new file mode 100644 index 0000000..9937c6d --- /dev/null +++ b/src/routes/api/registeredPlayers/+server.ts @@ -0,0 +1,9 @@ +import { globalEmitter, getAllRegisteredEventPlayers } from '$lib/server/eventManager'; +import { generateEndpoint } from '$lib/server/endpoint'; + +// Expose post request +export async function POST({ request }: any) { + // When post request recieved increment testscores by 1 + // Return ok so the frontend is happy + return new Response('ok'); +} diff --git a/src/routes/api/teams/+server.ts b/src/routes/api/teams/+server.ts index 103defd..001c85f 100644 --- a/src/routes/api/teams/+server.ts +++ b/src/routes/api/teams/+server.ts @@ -1,49 +1,5 @@ import { globalEmitter, getTeams } from '$lib/server/eventManager'; - -// Expose endpoint -export async function GET() { - // expose function type to both start and cancel - let newScore: () => Promise; - - // When request recieved open a new websocket - const stream = new ReadableStream({ - // Make a new controller so I can send messages - start(controller) { - // Function for sending messages - const enqueue = (data: any) => { - let transferdata = JSON.stringify(data); - // stringify data and add to controller queue - controller.enqueue(`data: ${transferdata}\n\n`); - }; - - // Function to grab score from database and add it to message queue - newScore = async () => { - let newScores = await getTeams(); - enqueue(newScores); - }; - - // Update score on connection so everything is synced - enqueue(getTeams()); - // Update score every time the emitter emits that the score has been changed - globalEmitter.on('scoreUpdate', newScore); - }, - cancel() { - // Delete the emitter listener so that the server doesnt crash - globalEmitter.off('scoreUpdate', newScore); - console.log('closed'); - } - }); - - // Return a response with an eventstream mime type - return new Response(stream, { - headers: { - 'Content-Type': 'text/event-stream', - 'Cache-Control': 'no-cache', - Connection: 'keep-alive', - 'X-Accel-Buffering': 'no' - } - }); -} +import { generateEndpoint } from '$lib/server/endpoint'; // Expose post request export async function POST({ request }: any) { @@ -52,3 +8,23 @@ export async function POST({ request }: any) { // Return ok so the frontend is happy return new Response('ok'); } + +export async function GET() { + const endpoint = generateEndpoint(async (enqueue) => { + // Function to grab score from database and add it to message queue + let newScore = async () => { + let newScores = await getTeams(); + enqueue(newScores); + }; + + // Initial Sync + newScore(); + globalEmitter.on('scoreUpdate', newScore); + + // Simply return the cleanup function here + return () => { + globalEmitter.off('scoreUpdate', newScore); + }; + }); + return (await endpoint).response; +}