From e298b4c1ad6f9ded30dcae762f021f87d9bc7610 Mon Sep 17 00:00:00 2001
From: GOEPP THOMAS <thomas@saturne-digital.fr>
Date: Thu, 16 Jan 2025 17:04:52 +0100
Subject: [PATCH] refactor: multi sse

---
 .../multiplayer/quiz/PlayingQuizMulti.tsx     |  2 +-
 .../multiplayer/quiz/quizBot/QuizBotMulti.tsx | 13 ++++++++++--
 src/services/MultiplayerService.ts            | 20 +++++++++++++++++++
 3 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/src/routes/multiplayer/quiz/PlayingQuizMulti.tsx b/src/routes/multiplayer/quiz/PlayingQuizMulti.tsx
index 1322596..03e53f9 100644
--- a/src/routes/multiplayer/quiz/PlayingQuizMulti.tsx
+++ b/src/routes/multiplayer/quiz/PlayingQuizMulti.tsx
@@ -75,7 +75,7 @@ export function PlayingQuizMulti() {
             ) : (
                 <>
                     <QuizTopMulti quizInformations={null} actualQuestion={actualQuestion} score={score} questionCount={questionCount} setStopQuizModalIsOpen={setStopQuizModalIsOpen} />
-                    <QuizBotMulti actualQuestion={actualQuestion} isHost={true} setPlayingQuizState={setPlayingQuizState} playingQuizState={playingQuizState} OpenModalEndQuiz={setEndQuizModalIsOpen}/>
+                    <QuizBotMulti actualQuestion={actualQuestion} isHost={true} setPlayingQuizState={setPlayingQuizState} playingQuizState={playingQuizState} OpenModalEndQuiz={setEndQuizModalIsOpen} setScore={setScore}/>
                     <StopQuizModal isOpen={stopQuizModalIsOpen} onClose={() => setStopQuizModalIsOpen(false)} />
                     <EndQuizModalMulti
                         isOpen={endQuizModalIsOpen}
diff --git a/src/routes/multiplayer/quiz/quizBot/QuizBotMulti.tsx b/src/routes/multiplayer/quiz/quizBot/QuizBotMulti.tsx
index e26440f..3f5d86f 100644
--- a/src/routes/multiplayer/quiz/quizBot/QuizBotMulti.tsx
+++ b/src/routes/multiplayer/quiz/quizBot/QuizBotMulti.tsx
@@ -8,6 +8,7 @@ import {Question} from "../../../../models/Question.ts";
 import {AnswerSSEResponse} from "../../../../models/Response/AnswerSSEResponse.ts";
 import {useEventSourceContext} from "../../../../components/EventSourceContextType.tsx";
 import {PlayingQuizState} from "../../../../models/PlayingQuizState.ts";
+import HttpError from "../../../../services/HttpError.ts";
 
 interface Props {
     actualQuestion: Question;
@@ -15,6 +16,7 @@ interface Props {
     setPlayingQuizState: (playingQuizState: PlayingQuizState) => void;
     playingQuizState: PlayingQuizState;
     OpenModalEndQuiz: (bool: boolean) => void;
+    setScore: (score: number) => void;
 }
 
 
@@ -38,12 +40,12 @@ const getStyleOfAnswerButton = (
     }
     return "answer-button";
 };
-export function QuizBotMulti({ actualQuestion, isHost, playingQuizState, setPlayingQuizState }: Props) {
+export function QuizBotMulti({ actualQuestion, isHost, playingQuizState, setPlayingQuizState, setScore }: Props) {
     const [questionIsFinished, setQuestionIsFinished] = useState(false);
     const [selectedAnswerId, setSelectedAnswerId] = useState<number | null>(null);
     const [validationButtonIsDisabled, setValidationButtonIsDisabled] = useState(true);
     const [correctAnswerId, setCorrectAnswerId] = useState<number | null>(null);
-    const { nextQuestion, answerQuestion, revealAnswer } = useMultiplayerService();
+    const { nextQuestion, answerQuestion, revealAnswer, getScore } = useMultiplayerService();
     const { eventSource } = useEventSourceContext();
 
     const initSSE = async () => {
@@ -75,6 +77,13 @@ export function QuizBotMulti({ actualQuestion, isHost, playingQuizState, setPlay
         {
             await revealAnswer();
         }
+        const scoreFetched = await getScore();
+        if(HttpError.isHttpError(scoreFetched))
+        {
+            return;
+        }
+        setScore(scoreFetched);
+
     };
 
     const onContinue = () => {
diff --git a/src/services/MultiplayerService.ts b/src/services/MultiplayerService.ts
index 4ceef96..bb918ba 100644
--- a/src/services/MultiplayerService.ts
+++ b/src/services/MultiplayerService.ts
@@ -160,6 +160,25 @@ export const useMultiplayerService = () => {
         }
     };
 
+    const getScore = async () : Promise<number | HttpError> => {
+        console.log("getScore");
+        try {
+            const response = await axios.get(`${url}/party/score`, {
+                withCredentials: true,
+            });
+            console.log("getScore done");
+            return response.data.score;
+        } catch (error: any) {
+            console.log("Error while startParty:", error);
+
+            if (error.response) {
+                return new HttpError(error.response.status, error.response.data?.message || "HTTP error");
+            } else {
+                return new HttpError(500, "Unexpected error: " + error.message);
+            }
+        }
+    };
+
     return {
         createParty,
         getCategories,
@@ -176,5 +195,6 @@ export const useMultiplayerService = () => {
         revealAnswer,
         answerQuestion,
         nextQuestion,
+        getScore,
     };
 };
-- 
GitLab