From 2893683f1ce3be10b3886e42ddf5c69c5d18b2fa Mon Sep 17 00:00:00 2001 From: Melanie St-Hilaire Date: Sat, 13 Apr 2024 11:54:20 -0400 Subject: [PATCH 1/2] Rapport 2 --- rapport/H24-iteration2.md | 67 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 rapport/H24-iteration2.md diff --git a/rapport/H24-iteration2.md b/rapport/H24-iteration2.md new file mode 100644 index 0000000..5f59021 --- /dev/null +++ b/rapport/H24-iteration2.md @@ -0,0 +1,67 @@ +# Plan d'itération 1 + +## Étapes jalons + +| Étape jalon | Date | +| :------------------------------------------------ | :--------- | +| Début de l'itération | 2024/02/08 | +| Démo de l'application et révision des user cases | 2024/02/27 | +| Fin de l'itération | 2024/02/29 | + +## Objectifs clés + +Les objectifs clés de cette itération sont les suivants: + +- Configurer le serveur pour héberger la solution +- Configurer la base de données pour permettre la sauvegarde des quizs sur le serveur +- Implémenter le téléversement d'image dans les quizs +- Corriger certains bugs + + +## Affectations d'éléments de travail + +| Nom / Description | Priorité | [Taille estimée (points)](#commentEstimer 'Comment estimer?') | Assigné à (nom) | Documents de référence | +| ------------------------------ | -------: | ------------------------------------------------------------: | --------------- | ----------------------------------------------------------------------------------------------- | +| Création d'un serveur | 1 | 4 | Samy, Mélanie || +| Sauvegarde de quiz création BD | 1| 4 | Mathieu, Louis || +| Connexion d'un étudiant à un quiz en cours| 1| 4| Mathieu, Louis || +| Upload d'images directement dans un quiz| 1| 3| Louis | | +| Bug: perte de connexion | 2| 1| Mathieu, Louis | | +| Bug commentaires | 2| 1| Mélanie | | + +## Problèmes principaux rencontrés + +| Problème | Notes | +| -------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| La section de GIFT pour la création des quizs ne semble plus prendre le code normalement comme avant. Un simple commentaire seul sera pris comme du texte normal et certains bout de codes ne fonctionnent pas correctement s'il n'y a pas une entrée avant.| Investigation en cours pour trouver ce qui ne fonctionne pas | +| Difficulté à mettre en place le microservice pour la gestion des images. API mis en place pour la gestion des images dans le backend| | + +## Critères d'évaluation + +> Une brève description de la façon d'évaluer si les objectifs (définis plus haut) de haut niveau ont été atteints. +> Vos critères d'évaluation doivent être objectifs (aucun membre de l'équipe ne peut avoir une opinion divergente) et quantifiables (sauf pour ceux évalués par l'auxiliaire d'enseignement). En voici des exemples: + +- Accessibilité du serveur +- Disponibilité des images pour les quizs +- Modification du processus de connexion pour répondre aux cas utilisateurs + +## Évaluation + +| Résumé | | +| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------- | +| Cible d'évaluation | Itération | +| Date d'évaluation | 2024/02/27 | +| Participants | **Équipe** : Louis-Antoine Caron, Samy Waddah, Mathieu Roy, Mélanie St-Hilaire
**professeur** : Christopher Fuhrman | +| État du projet | 🟢 | + +### Éléments de travail: prévus vs réalisés + +Le serveur a été configuré et la solution est présentement déployée pour débuter l'utilisation en classe. Cela permettra entre autre de tester les performances du serveur et permettra aux professeurs d'utiliser plus souvent la solution. Les quizs sont désormais sauvegardés sur le serveur, mais ils ne sont pas encore associés à un compte, il faut donc se fier au cookies pour récupérer les quizs. Les commentaires ont été temporairement corrigés en majorité, mais quelques problèmes de plus ont été apperçu dans la section d'édition du quiz. Le bug de perte de connexion semble avoir déja été corrigé par l'ancienne équipe et l'importation d'image dans les quiz est maintenant fonctionnelle. + +### Évaluation par rapport aux résultats selon les critères d'évaluation + +Nos principaux critères d'éavaluation ont été atteints, soit rendre le serveur accessible pour utilisation et autoriser l'importation d'images dans les quizs, qui sont maintenant sauvegardés sur le serveur. Même si de nouveaux problèmes ont fait surfaces, nous estimons que le projet répond à nos critères et est sur la bonne voie. + +## Autres préoccupations et écarts + +Quelques bugs en plus ont été découverts à la suite de cette itération. Une surveillance doit être effectué pour vérifier la stabilité du serveur. From 7497abd71291c90609e1f2a7810c6b782faec96b Mon Sep 17 00:00:00 2001 From: Melanie St-Hilaire Date: Tue, 16 Apr 2024 12:14:20 -0400 Subject: [PATCH 2/2] Modification Katex, prise en charge markdown, ajout description --- .../GIFTCheatSheet/GiftCheatSheet.tsx | 11 +++++++--- .../GiftTemplate/templates/TextType.ts | 1 + .../MultipleChoiceQuestion.tsx | 21 +++++++++++-------- .../NumericalQuestion/NumericalQuestion.tsx | 17 +++++++-------- client/src/components/Questions/Question.tsx | 15 +++++-------- .../ShortAnswerQuestion.tsx | 17 +++++++-------- .../TrueFalseQuestion/TrueFalseQuestion.tsx | 15 ++++++------- 7 files changed, 46 insertions(+), 51 deletions(-) diff --git a/client/src/components/GIFTCheatSheet/GiftCheatSheet.tsx b/client/src/components/GIFTCheatSheet/GiftCheatSheet.tsx index 179e454..4dc9f1e 100644 --- a/client/src/components/GIFTCheatSheet/GiftCheatSheet.tsx +++ b/client/src/components/GIFTCheatSheet/GiftCheatSheet.tsx @@ -137,14 +137,19 @@ const GiftCheatSheet: React.FC = () => {
-

8. LaTeX

+

8. LaTeX et Markdown

- Le format LaTeX est supporté dans cette application. Vous devez cependant penser + Les format LaTeX et markdown sont supportés dans cette application. Vous devez cependant penser à 'échapper' les caractères spéciaux mentionnés plus haut.

Exemple d'équation:

-                    {'$$x\\= \\frac\\{y^2\\}\\{4\\}$$'}
+                    {'$$x\\= \\frac\\{y^2\\}\\{4\\}$$'}
+                    {'\n$x\\= \\frac\\{y^2\\}\\{4\\}$'}
+                
+

Exemple de texte Markdown:

+
+                    {'[markdown]Grâce à la balise markdown, Il est possible d\'insérer du texte *italique*, **gras**, du `code` et bien plus.'}
                 
diff --git a/client/src/components/GiftTemplate/templates/TextType.ts b/client/src/components/GiftTemplate/templates/TextType.ts index bf9a3a3..b250637 100644 --- a/client/src/components/GiftTemplate/templates/TextType.ts +++ b/client/src/components/GiftTemplate/templates/TextType.ts @@ -9,6 +9,7 @@ interface TextTypeOptions extends TemplateOptions { function formatLatex(text: string): string { return text .replace(/\$\$(.*?)\$\$/g, (_, inner) => katex.renderToString(inner, { displayMode: true })) + .replace(/\$(.*?)\$/g, (_, inner) => katex.renderToString(inner, { displayMode: false })) .replace(/\\\[(.*?)\\\]/g, (_, inner) => katex.renderToString(inner, { displayMode: true })) .replace(/\\\((.*?)\\\)/g, (_, inner) => katex.renderToString(inner, { displayMode: false }) diff --git a/client/src/components/Questions/MultipleChoiceQuestion/MultipleChoiceQuestion.tsx b/client/src/components/Questions/MultipleChoiceQuestion/MultipleChoiceQuestion.tsx index 54022a3..d3e7a82 100644 --- a/client/src/components/Questions/MultipleChoiceQuestion/MultipleChoiceQuestion.tsx +++ b/client/src/components/Questions/MultipleChoiceQuestion/MultipleChoiceQuestion.tsx @@ -1,8 +1,10 @@ // MultipleChoiceQuestion.tsx -import React, { useState } from 'react'; -import Latex from 'react-latex'; +import React, { useEffect, useState } from 'react'; import '../questionStyle.css'; import { Button } from '@mui/material'; +import TextType from '../../GiftTemplate/templates/TextType'; +import { TextFormat } from '../../GiftTemplate/templates/types'; +import Latex from 'react-latex'; type Choices = { feedback: { format: string; text: string } | null; @@ -12,8 +14,7 @@ type Choices = { }; interface Props { - questionTitle: string | null; - questionContent: string; + questionContent: TextFormat; choices: Choices[]; globalFeedback?: string | undefined; handleOnSubmitAnswer?: (answer: string) => void; @@ -21,22 +22,24 @@ interface Props { } const MultipleChoiceQuestion: React.FC = (props) => { - const { questionTitle, questionContent, choices, showAnswer, handleOnSubmitAnswer, globalFeedback } = props; + const { questionContent, choices, showAnswer, handleOnSubmitAnswer, globalFeedback } = props; const [answer, setAnswer] = useState(); + useEffect(() => { + setAnswer(undefined); + }, [questionContent]); + const handleOnClickAnswer = (choice: string) => { setAnswer(choice); }; + const alpha = Array.from(Array(26)).map((_e, i) => i + 65); const alphabet = alpha.map((x) => String.fromCharCode(x)); return (
-
- {questionTitle} -
- {questionContent} +
{choices.map((choice, i) => { diff --git a/client/src/components/Questions/NumericalQuestion/NumericalQuestion.tsx b/client/src/components/Questions/NumericalQuestion/NumericalQuestion.tsx index 0fcc56b..a1bfa9a 100644 --- a/client/src/components/Questions/NumericalQuestion/NumericalQuestion.tsx +++ b/client/src/components/Questions/NumericalQuestion/NumericalQuestion.tsx @@ -1,8 +1,9 @@ // NumericalQuestion.tsx import React, { useState } from 'react'; -import Latex from 'react-latex'; import '../questionStyle.css'; import { Button, TextField } from '@mui/material'; +import TextType from '../../GiftTemplate/templates/TextType'; +import { TextFormat } from '../../GiftTemplate/templates/types'; type CorrectAnswer = { numberHigh?: number; @@ -12,8 +13,7 @@ type CorrectAnswer = { }; interface Props { - questionTitle: string | null; - questionContent: string; + questionContent: TextFormat; correctAnswers: CorrectAnswer; globalFeedback?: string | undefined; handleOnSubmitAnswer?: (answer: number) => void; @@ -21,7 +21,7 @@ interface Props { } const NumericalQuestion: React.FC = (props) => { - const { questionTitle, questionContent, correctAnswers, showAnswer, handleOnSubmitAnswer, globalFeedback } = + const { questionContent, correctAnswers, showAnswer, handleOnSubmitAnswer, globalFeedback } = props; const [answer, setAnswer] = useState(); @@ -33,11 +33,8 @@ const NumericalQuestion: React.FC = (props) => { return (
-
- {questionTitle} -
- {questionContent} +
{showAnswer ? ( <> @@ -49,8 +46,8 @@ const NumericalQuestion: React.FC = (props) => {
) => { setAnswer(e.target.valueAsNumber); }} diff --git a/client/src/components/Questions/Question.tsx b/client/src/components/Questions/Question.tsx index ca23679..28e4d9b 100644 --- a/client/src/components/Questions/Question.tsx +++ b/client/src/components/Questions/Question.tsx @@ -30,8 +30,7 @@ const Question: React.FC = ({ case 'TF': questionTypeComponent = ( = ({ case 'MC': questionTypeComponent = ( = ({ if (!Array.isArray(question.choices)) { questionTypeComponent = ( = ({ } else { questionTypeComponent = ( = ({ case 'Short': questionTypeComponent = ( void; @@ -21,16 +21,13 @@ interface Props { } const ShortAnswerQuestion: React.FC = (props) => { - const { questionTitle, questionContent, choices, showAnswer, handleOnSubmitAnswer, globalFeedback } = props; + const { questionContent, choices, showAnswer, handleOnSubmitAnswer, globalFeedback } = props; const [answer, setAnswer] = useState(); return (
-
- {questionTitle} -
- {questionContent} +
{showAnswer ? ( <> @@ -46,8 +43,8 @@ const ShortAnswerQuestion: React.FC = (props) => {
{ setAnswer(e.target.value); }} diff --git a/client/src/components/Questions/TrueFalseQuestion/TrueFalseQuestion.tsx b/client/src/components/Questions/TrueFalseQuestion/TrueFalseQuestion.tsx index e56eb4b..f3a1357 100644 --- a/client/src/components/Questions/TrueFalseQuestion/TrueFalseQuestion.tsx +++ b/client/src/components/Questions/TrueFalseQuestion/TrueFalseQuestion.tsx @@ -1,12 +1,12 @@ // TrueFalseQuestion.tsx import React, { useState, useEffect } from 'react'; -import Latex from 'react-latex'; import '../questionStyle.css'; import { Button } from '@mui/material'; +import TextType from '../../GiftTemplate/templates/TextType'; +import { TextFormat } from '../../GiftTemplate/templates/types'; interface Props { - questionTitle: string | null; - questionContent: string; + questionContent: TextFormat; correctAnswer: boolean; globalFeedback?: string | undefined; handleOnSubmitAnswer?: (answer: boolean) => void; @@ -14,23 +14,20 @@ interface Props { } const TrueFalseQuestion: React.FC = (props) => { - const { questionTitle, questionContent, correctAnswer, showAnswer, handleOnSubmitAnswer, globalFeedback } = + const { questionContent, correctAnswer, showAnswer, handleOnSubmitAnswer, globalFeedback } = props; const [answer, setAnswer] = useState(undefined); useEffect(() => { setAnswer(undefined); - }, [questionTitle]); + }, [questionContent]); const selectedTrue = answer ? 'selected' : ''; const selectedFalse = answer !== undefined && !answer ? 'selected' : ''; return (
-
- {questionTitle} -
- {questionContent} +