91 lines
2.3 KiB
JavaScript
91 lines
2.3 KiB
JavaScript
import { supabase } from "$lib/supabase.js";
|
|
import { QuestionsData, wait } from "./create.svelte.js";
|
|
import { IsAllValuesFilled } from "./IsAllValuesFilled.js";
|
|
import toast from "svelte-5-french-toast";
|
|
|
|
export async function createGame() {
|
|
if (!IsAllValuesFilled()) return;
|
|
|
|
console.log("Creating game rn!");
|
|
|
|
if (wait.v) {
|
|
return;
|
|
}
|
|
wait.v = true;
|
|
const gamePin = Math.floor(Math.random() * 1000000)
|
|
.toString()
|
|
.padStart(6, "0");
|
|
|
|
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;
|
|
}
|
|
|
|
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;
|
|
}
|