From 3b254c1aa1970434e8746a90750b04937cb24b0c Mon Sep 17 00:00:00 2001 From: RezHackXYZ Date: Tue, 3 Jun 2025 13:28:27 +0530 Subject: [PATCH] make it backword compatible! --- src/routes/kahootclone/create/Buttons.svelte | 14 ++- .../kahootclone/create/create.svelte.js | 2 +- src/routes/kahootclone/create/createGame.js | 116 +++++++++++------- 3 files changed, 85 insertions(+), 47 deletions(-) diff --git a/src/routes/kahootclone/create/Buttons.svelte b/src/routes/kahootclone/create/Buttons.svelte index 8bbe757..bd66d33 100644 --- a/src/routes/kahootclone/create/Buttons.svelte +++ b/src/routes/kahootclone/create/Buttons.svelte @@ -2,7 +2,7 @@ import toast from "svelte-5-french-toast"; import { DefaultQuestions } from "$lib/config.js"; - import { QuestionsData } from "./create.svelte"; + import { QuestionsData, wait } from "./create.svelte"; import { createGame } from "./createGame.js"; let userInput = ""; @@ -87,7 +87,13 @@ The user's topic of interest is: - + {#if wait.v == true} + + {:else} + + {/if} diff --git a/src/routes/kahootclone/create/create.svelte.js b/src/routes/kahootclone/create/create.svelte.js index 5e66cd0..53eed4a 100644 --- a/src/routes/kahootclone/create/create.svelte.js +++ b/src/routes/kahootclone/create/create.svelte.js @@ -12,4 +12,4 @@ export let QuestionsData = $state({ }, ], }); - +export let wait = $state({ v: false }); \ No newline at end of file diff --git a/src/routes/kahootclone/create/createGame.js b/src/routes/kahootclone/create/createGame.js index 782eb87..adbea5a 100644 --- a/src/routes/kahootclone/create/createGame.js +++ b/src/routes/kahootclone/create/createGame.js @@ -1,51 +1,83 @@ import { supabase } from "$lib/supabase.js"; -import { QuestionsData } from "./create.svelte.js"; +import { QuestionsData, wait } from "./create.svelte.js"; import toast from "svelte-5-french-toast"; export async function createGame() { - let GamesData; - try { - GamesData = await toast.promise( - (async () => { - let { data, error } = await supabase.from("games").insert([{}]).select("id,gamepin"); - if (error) { - throw new Error(error.message); - } - return data; - })(), - { - loading: "Adding Game...", - success: "Game added!", - error: (err) => `Could not add game.\nError: ${err.message}\n\n Please try again.`, - }, - ); + wait.v = true; + const gamePin = Math.floor(Math.random() * 1000000) + .toString() + .padStart(6, "0"); - await toast.promise( - (async () => { - const { data, error } = await supabase - .from("questions") - .insert( - QuestionsData.v.map((_, index) => ({ - ...QuestionsData.v[index], - gameid: GamesData[0].id, - })), - ) - .select(); - if (error) { - throw new Error(error.message); - } - return data; - })(), - { - loading: "Adding Questions and Answers...", - success: "Questions and Answers added!", - error: (err) => - `Could not add Questions and Answers.\nError: ${err.message}\n\n Please try again.`, - }, - ); - } catch (error) { + const questionsData = QuestionsData.v.map((q) => ({ + gameid: gamePin, + questionstext: q.questionText, + correctanswer: q.CorrectOption.SingleAnswer, + timeLimit: q.TimeLimit, + media: q.hasMedia ? q.mediaURL : null, + })); + + const insertGamePromise = supabase.from("games").insert({ + creator: "anonymous", + creationdate: new Date().toISOString(), + status: "lobby", + gamepin: gamePin, + }); + + const { data: gameData, error: gameError } = await toast.promise(insertGamePromise, { + loading: "Creating game...", + success: "Game created!", + error: (err) => + "Failed to create game: " + (err?.message || "Unknown error") + "\n\nPlease try again.", + }); + + if (gameError) { + wait.v = false; return; } - toast.success(`Game created! Your game pin is: ${GamesData[0].gamepin}`); + const insertQuestionsPromise = supabase.from("questions").insert(questionsData).select("id"); + + const { data: questionsResult, error: questionsError } = await toast.promise( + insertQuestionsPromise, + { + loading: "Inserting questions...", + success: "Questions inserted!", + error: (err) => + "Failed to insert questions: " + + (err?.message || "Unknown error") + + "\n\nPlease try again.", + }, + ); + + if (questionsError) { + wait.v = false; + return; + } + + const answersData = []; + questionsResult.forEach((question, index) => { + QuestionsData.v[index].options.forEach((answer) => { + answersData.push({ + questionid: question.id, + content: answer, + }); + }); + }); + + const insertAnswersPromise = supabase.from("answers").insert(answersData); + + const { error: answersError } = await toast.promise(insertAnswersPromise, { + loading: "Inserting answers...", + success: "Answers inserted!", + error: (err) => + "Failed to insert answers: " + (err?.message || "Unknown error") + "\n\nPlease try again.", + }); + + if (answersError) { + wait.v = false; + return; + } + + window.location.href = `/kahootclone/host?gamepin=${gamePin}`; + wait.v = false; }