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(
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(usersRouter)
v1Router.include_router(sessionsRouter)
......
......@@ -182,7 +182,8 @@
"loginUser": "Se connecter via un compte utilisateur",
"loginEmail": "Utiliser une adresse e-mail",
"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": {
"nickname": "Nom",
......
......@@ -40,3 +40,12 @@ export async function sendSurveyResponseAPI(
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">
import { sendSurveyResponseAPI } from '$lib/api/survey';
import { getSurveyScoreAPI } from '$lib/api/survey';
import Survey from '$lib/types/survey.js';
import { t } from '$lib/services/i18n';
......@@ -36,6 +37,7 @@
let soundPlayer: HTMLAudioElement;
let displayQuestionOptions: string[] = [...(currentQuestion.options ?? [])];
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
function shuffle(array: string[]) {
......@@ -75,7 +77,7 @@
sid,
survey.id,
currentGroupId,
currentQuestionId,
questionsRandomized[currentQuestionId]['_id'],
currentQuestion.options.findIndex((o: string) => o === option),
(new Date().getTime() - startTime) / 1000
))
......@@ -105,7 +107,7 @@
sid,
survey.id,
currentGroupId,
currentQuestionId,
questionsRandomized[currentQuestionId]['_id'],
-1,
(new Date().getTime() - startTime) / 1000,
gapTexts
......@@ -121,10 +123,14 @@
}
}
function nextGroup() {
async function nextGroup() {
if (currentGroupId < survey.groups.length - 1) {
setGroupId(currentGroupId + 1);
} else {
const scoreData = await getSurveyScoreAPI(survey.id);
if (scoreData) {
finalScore = scoreData.score;
}
step++;
}
}
......@@ -251,5 +257,8 @@
{:else if step == 3}
<div class="mx-auto mt-16 text-center">
<h1>{$t('surveys.complete')}</h1>
{#if finalScore !== null}
<p>{$t('surveys.score')} {finalScore} %</p>
{/if}
</div>
{/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