Skip to content
Extraits de code Groupes Projets
Valider 9a1e49ae rédigé par Delphine van Rossum's avatar Delphine van Rossum Validation de Brieuc Dubois
Parcourir les fichiers

Resolve "tests: show score to user at the end"

parent e159aac5
Aucune branche associée trouvée
Aucune étiquette associée trouvée
3 requêtes de fusion!14Merge dev into main,!12Merge dev into main,!9Resolve "tests: show score to user at the end"
...@@ -1249,6 +1249,29 @@ def get_survey_responses( ...@@ -1249,6 +1249,29 @@ def get_survey_responses(
return crud.get_survey_responses(db, survey_id) return crud.get_survey_responses(db, survey_id)
@surveyRouter.get("/{survey_id}/score", response_model=dict)
def get_survey_score(
survey_id: int,
db: Session = Depends(get_db),
):
if not crud.get_survey(db, survey_id):
raise HTTPException(status_code=404, detail="Survey not found")
responses = crud.get_survey_responses(db, survey_id)
score = 0
total = 0
for response in responses:
question = crud.get_survey_question(db, response.question_id)
if not question:
continue
total += 1
if response.selected_id == question.correct:
score += 1
return {"survey_id": survey_id, "score": round((score / total) * 100, 2)}
v1Router.include_router(authRouter) v1Router.include_router(authRouter)
v1Router.include_router(usersRouter) v1Router.include_router(usersRouter)
v1Router.include_router(sessionsRouter) v1Router.include_router(sessionsRouter)
......
...@@ -182,7 +182,8 @@ ...@@ -182,7 +182,8 @@
"loginUser": "Se connecter via un compte utilisateur", "loginUser": "Se connecter via un compte utilisateur",
"loginEmail": "Utiliser une adresse e-mail", "loginEmail": "Utiliser une adresse e-mail",
"invalidEmail": "Adresse e-mail invalide", "invalidEmail": "Adresse e-mail invalide",
"complete": "Questionnaire complété. Merci pour votre participation !" "complete": "Questionnaire complété. Merci pour votre participation !",
"score": "Vous avez obtenu un score de "
}, },
"users": { "users": {
"nickname": "Nom", "nickname": "Nom",
......
...@@ -40,3 +40,12 @@ export async function sendSurveyResponseAPI( ...@@ -40,3 +40,12 @@ export async function sendSurveyResponseAPI(
return true; return true;
} }
export async function getSurveyScoreAPI(survey_id: number) {
const response = await axiosInstance.get(`/surveys/${survey_id}/score`);
if (response.status !== 200) {
toastAlert('Failed to retrieve survey score');
return null;
}
return response.data;
}
<script lang="ts"> <script lang="ts">
import { sendSurveyResponseAPI } from '$lib/api/survey'; import { sendSurveyResponseAPI } from '$lib/api/survey';
import { getSurveyScoreAPI } from '$lib/api/survey';
import Survey from '$lib/types/survey.js'; import Survey from '$lib/types/survey.js';
import { t } from '$lib/services/i18n'; import { t } from '$lib/services/i18n';
...@@ -36,6 +37,7 @@ ...@@ -36,6 +37,7 @@
let soundPlayer: HTMLAudioElement; let soundPlayer: HTMLAudioElement;
let displayQuestionOptions: string[] = [...(currentQuestion.options ?? [])]; let displayQuestionOptions: string[] = [...(currentQuestion.options ?? [])];
shuffle(displayQuestionOptions); shuffle(displayQuestionOptions);
let finalScore: number | null = null;
//source: shuffle function code taken from https://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array/18650169#18650169 //source: shuffle function code taken from https://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array/18650169#18650169
function shuffle(array: string[]) { function shuffle(array: string[]) {
...@@ -75,7 +77,7 @@ ...@@ -75,7 +77,7 @@
sid, sid,
survey.id, survey.id,
currentGroupId, currentGroupId,
currentQuestionId, questionsRandomized[currentQuestionId]['_id'],
currentQuestion.options.findIndex((o: string) => o === option), currentQuestion.options.findIndex((o: string) => o === option),
(new Date().getTime() - startTime) / 1000 (new Date().getTime() - startTime) / 1000
)) ))
...@@ -105,7 +107,7 @@ ...@@ -105,7 +107,7 @@
sid, sid,
survey.id, survey.id,
currentGroupId, currentGroupId,
currentQuestionId, questionsRandomized[currentQuestionId]['_id'],
-1, -1,
(new Date().getTime() - startTime) / 1000, (new Date().getTime() - startTime) / 1000,
gapTexts gapTexts
...@@ -121,10 +123,14 @@ ...@@ -121,10 +123,14 @@
} }
} }
function nextGroup() { async function nextGroup() {
if (currentGroupId < survey.groups.length - 1) { if (currentGroupId < survey.groups.length - 1) {
setGroupId(currentGroupId + 1); setGroupId(currentGroupId + 1);
} else { } else {
const scoreData = await getSurveyScoreAPI(survey.id);
if (scoreData) {
finalScore = scoreData.score;
}
step++; step++;
} }
} }
...@@ -251,5 +257,8 @@ ...@@ -251,5 +257,8 @@
{:else if step == 3} {:else if step == 3}
<div class="mx-auto mt-16 text-center"> <div class="mx-auto mt-16 text-center">
<h1>{$t('surveys.complete')}</h1> <h1>{$t('surveys.complete')}</h1>
{#if finalScore !== null}
<p>{$t('surveys.score')} {finalScore} %</p>
{/if}
</div> </div>
{/if} {/if}
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter