diff --git a/microservices/cors.conf b/microservices/cors.conf index c51cb1a7789678de68b34b7fd56c0fc83db4ce74..b0c36cc2dee9ddf19af594e81009754c9fcd69d5 100644 --- a/microservices/cors.conf +++ b/microservices/cors.conf @@ -1,10 +1,8 @@ -# Autoriser toutes les origines add_header 'Access-Control-Allow-Origin' '*' always; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE' always; add_header 'Access-Control-Allow-Headers' 'Authorization, Content-Type' always; add_header 'Access-Control-Max-Age' 1728000 always; -# Gérer les pré-requêtes OPTIONS correctement if ($request_method = 'OPTIONS') { add_header 'Access-Control-Allow-Origin' '*' always; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, DELETE' always; diff --git a/microservices/creation_qcm/src/routes/CreationQcm.ts b/microservices/creation_qcm/src/routes/CreationQcm.ts index 5a77950e8587df3f66113564e7a17e0f80754d07..71cd45e14c45c474891191521014eba38742dcc8 100644 --- a/microservices/creation_qcm/src/routes/CreationQcm.ts +++ b/microservices/creation_qcm/src/routes/CreationQcm.ts @@ -9,181 +9,172 @@ import { MessageRoute } from './MessageRoute.js'; const router: express.Router = express.Router(); // router.use(verifyJWT) +// 🚀 Route pour créer un QCM router.post('/QCM', verifyJWT, async (req: express.Request, res: express.Response) => { console.log(`[LOG] Ajout QCM avec les données:`, req.body); - const { qcm, idUser } = req.body; - console.log(qcm, idUser, qcm["nomQcm"], qcm["randomQuestion"], qcm["tempsMax"]) - if (!qcm || !idUser || !qcm["nomQcm"] || qcm["randomQuestion"] === undefined || qcm["tempsMax"] === undefined) - { - res.status(400).send({ error: MessageRoute.misPara }); - return - } - const codeAcces: number = getRandomNumber(1000, 9999); - const qcmCreate = await db.qcmTable.create({ - data: { - nomQCM : qcm["nomQcm"], - codeAcces : codeAcces, - randomOrder : qcm["randomQuestion"], - temps : qcm["tempsMax"], - idUserCreator : idUser, + try { + const { qcm, idUser } = req.body; + if (!qcm || !idUser || !qcm["nomQcm"] || qcm["randomQuestion"] === undefined || qcm["tempsMax"] === undefined) { + console.error(`[ERROR] Paramètres manquants pour la création du QCM`); + return res.status(400).send({ error: MessageRoute.misPara }); } - }); - res.status(200).send({id: qcmCreate.idQCM}); + + const codeAcces: number = getRandomNumber(1000, 9999); + const qcmCreate = await db.qcmTable.create({ + data: { + nomQCM: qcm["nomQcm"], + codeAcces: codeAcces, + randomOrder: qcm["randomQuestion"], + temps: qcm["tempsMax"], + idUserCreator: idUser, + } + }); + + console.log(`[SUCCESS] QCM créé avec l'ID: ${qcmCreate.idQCM}`); + res.status(200).send({ id: qcmCreate.idQCM }); + + } catch (error) { + console.error(`[ERROR] Erreur lors de la création du QCM:`, error); + res.status(500).send({ error: MessageRoute.serverError }); + } }); + +// 🚀 Route pour mettre à jour un QCM router.put('/QCM', verifyJWT, async (req: express.Request, res: express.Response) => { - console.log(`[LOG] Traitement de la création de QCM avec les données:`, req.body); - const { qcm } = req.body; - console.table(qcm) - if (!qcm || !qcm["nomQcm"] || qcm["randomQuestion"] === undefined || qcm["tempsMax"] === undefined || qcm["idQcm"] === undefined) - { - res.status(400).send({ error: MessageRoute.misPara }); - return - } - const infoQcm = await db.qcmTable.findFirst({ - where: { - idQCM: qcm["idQcm"], + console.log(`[LOG] Mise à jour QCM avec les données:`, req.body); + try { + const { qcm } = req.body; + if (!qcm || !qcm["nomQcm"] || qcm["randomQuestion"] === undefined || qcm["tempsMax"] === undefined || qcm["idQcm"] === undefined) { + console.error(`[ERROR] Paramètres manquants pour la mise à jour du QCM`); + return res.status(400).send({ error: MessageRoute.misPara }); + } + + const infoQcm = await db.qcmTable.findFirst({ where: { idQCM: qcm["idQcm"] } }); + if (!infoQcm) { + console.error(`[ERROR] QCM introuvable avec l'ID: ${qcm["idQcm"]}`); + return res.status(404).send({ error: MessageRoute.qcmDoesntExist }); } - }); - - if(!infoQcm) - { - res.status(404).send({ error: MessageRoute.qcmDoesntExist }); - return + + checkUser(req, res, infoQcm.idUserCreator, "This is not your QCM"); + + const qcmUpdate = await db.qcmTable.update({ + where: { idQCM: qcm["idQcm"] }, + data: { + nomQCM: qcm["nomQcm"], + randomOrder: qcm["randomQuestion"], + temps: qcm["tempsMax"], + }, + }); + + console.log(`[SUCCESS] QCM mis à jour:`, qcmUpdate); + res.status(200).send(qcmUpdate); + } catch (error) { + console.error(`[ERROR] Erreur lors de la mise à jour du QCM:`, error); + res.status(500).send({ error: MessageRoute.serverError }); } - checkUser(req, res, infoQcm?.idUserCreator, "This is not your QCM"); - const qcmCreate = await db.qcmTable.update({ - where: { - idQCM: qcm["idQcm"] - }, - data: { - nomQCM : qcm["nomQcm"], - randomOrder : qcm["randomQuestion"], - temps : qcm["tempsMax"], - }, - }); - res.status(200).send(qcmCreate); }); +// 🚀 Route pour ajouter une question numérique router.post('/numeric_question', verifyJWT, async (req: express.Request, res: express.Response) => { console.log(`[LOG] Ajout de question numérique avec les données:`, req.body); - const { question, idQcm } = req.body; - - console.log(question, idQcm); - if (!idQcm || !question || !question["question"] || question["nbPtsNegatif"] === undefined || question["nbPtsPositif"] === undefined || question["valNum"] === undefined || question["position"] === undefined) - { - res.status(400).send({ error: MessageRoute.misPara }); - return - } - const infoQcm = await db.qcmTable.findFirst({ - where: { - idQCM: idQcm + try { + const { question, idQcm } = req.body; + if (!idQcm || !question || !question["question"] || question["nbPtsNegatif"] === undefined || question["nbPtsPositif"] === undefined || question["valNum"] === undefined || question["position"] === undefined) { + console.error(`[ERROR] Paramètres manquants pour la question numérique`); + return res.status(400).send({ error: MessageRoute.misPara }); } - }); - if(!infoQcm) - { - res.status(404).send({ error: MessageRoute.qcmDoesntExist }); - return - } - checkUser(req, res, infoQcm.idUserCreator, MessageRoute.cantCreate); - const type = await db.type.findFirst({ - where: { - nomType: "numerique" - }, - }); - if(!type) - { - res.status(500).send({ error: 'Server error' }); - return - } - const qcmCreate = await db.question.create({ - data: { - nbPtsNegatif: question["nbPtsNegatif"], - nbPtsPositif: question["nbPtsPositif"], - position: question["position"], - isMultiple: false, - question: question["question"], - idQCM: idQcm, - idType: type["idType"], - numeric: question["valNum"], - randomOrder: false, + + const infoQcm = await db.qcmTable.findFirst({ where: { idQCM: idQcm } }); + if (!infoQcm) { + console.error(`[ERROR] QCM introuvable avec l'ID: ${idQcm}`); + return res.status(404).send({ error: MessageRoute.qcmDoesntExist }); } - }); - res.status(200).send({id: qcmCreate.idQuestion}); + + checkUser(req, res, infoQcm.idUserCreator, MessageRoute.cantCreate); + + const type = await db.type.findFirst({ where: { nomType: "numerique" } }); + if (!type) { + console.error(`[ERROR] Type 'numerique' introuvable`); + return res.status(500).send({ error: 'Server error' }); + } + + const questionCreate = await db.question.create({ + data: { + nbPtsNegatif: question["nbPtsNegatif"], + nbPtsPositif: question["nbPtsPositif"], + position: question["position"], + isMultiple: false, + question: question["question"], + idQCM: idQcm, + idType: type["idType"], + numeric: question["valNum"], + randomOrder: false, + } + }); + + console.log(`[SUCCESS] Question numérique créée avec l'ID: ${questionCreate.idQuestion}`); + res.status(200).send({ id: questionCreate.idQuestion }); + + } catch (error) { + console.error(`[ERROR] Erreur lors de la création de la question numérique:`, error); + res.status(500).send({ error: MessageRoute.serverError }); + } }); + +// 🚀 Route pour ajouter une question vrai/faux router.post('/true_false_question', verifyJWT, async (req: express.Request, res: express.Response) => { console.log(`[LOG] Ajout question true_false avec les données:`, req.body); try { const { question, idQcm } = req.body; - console.table(req.body) - console.log(question, idQcm) - if (!idQcm || !question || !question["question"] || !question["nbPtsNegatif"] === undefined || !question["nbPtsPositif"] === undefined || question["isVraiFaux"] === undefined || question["valVraiFaux"] === undefined) { - res.status(400).send({ error: MessageRoute.misPara }); - return + if (!idQcm || !question || !question["question"] || question["nbPtsNegatif"] === undefined || question["nbPtsPositif"] === undefined || question["isVraiFaux"] === undefined || question["valVraiFaux"] === undefined) { + console.error(`[ERROR] Paramètres manquants pour la question vrai/faux`); + return res.status(400).send({ error: MessageRoute.misPara }); } - - const infoQcm = await db.qcmTable.findFirst({ - where: { - idQCM: idQcm - } - }); - + + const infoQcm = await db.qcmTable.findFirst({ where: { idQCM: idQcm } }); if (!infoQcm) { - res.status(400).send({ error:MessageRoute.qcmDoesntExist}); - return + console.error(`[ERROR] QCM introuvable avec l'ID: ${idQcm}`); + return res.status(404).send({ error: MessageRoute.qcmDoesntExist }); } + checkUser(req, res, infoQcm.idUserCreator, MessageRoute.cantCreate); - - const type = await db.type.findFirst({ - where: { - nomType: "vraiFaux" - } - }); - + + const type = await db.type.findFirst({ where: { nomType: "vraiFaux" } }); if (!type) { - res.status(500).send({ error: 'Server Problem: Type not found' }); - return + console.error(`[ERROR] Type 'vraiFaux' introuvable`); + return res.status(500).send({ error: 'Server Problem: Type not found' }); } - - + const questionCreate = await db.question.create({ - data: { - nbPtsNegatif: question["nbPtsNegatif"], - nbPtsPositif: question["nbPtsPositif"], - position: 0, - isMultiple: false, - question: question["question"], - idQCM: idQcm, - idType: type["idType"], - randomOrder: question["randomOrder"], - } + data: { + nbPtsNegatif: question["nbPtsNegatif"], + nbPtsPositif: question["nbPtsPositif"], + position: 0, + isMultiple: false, + question: question["question"], + idQCM: idQcm, + idType: type["idType"], + randomOrder: question["randomOrder"], + } }); - - - if (!questionCreate) { - res.status(500).send({ error: 'Server Problem: Question creation failed' }); - return - } - - const idQuestion = questionCreate.idQuestion; - + + console.log(`[SUCCESS] Question vrai/faux créée avec l'ID: ${questionCreate.idQuestion}`); + const choixData = [ - { nomChoix: "Vrai", isCorrect: question.valVraiFaux, idQuestion: idQuestion, position: 0 }, - { nomChoix: "Faux", isCorrect: !question.valVraiFaux, idQuestion: idQuestion, position: 1 } + { nomChoix: "Vrai", isCorrect: question.valVraiFaux, idQuestion: questionCreate.idQuestion, position: 0 }, + { nomChoix: "Faux", isCorrect: !question.valVraiFaux, idQuestion: questionCreate.idQuestion, position: 1 } ]; - - const choixCreate = await db.choix.createMany({ - data: choixData - }); - if(!choixCreate){ - res.status(500).send({ error: MessageRoute.serverError }); - return - } - - res.status(200).send({id: idQuestion}); + + await db.choix.createMany({ data: choixData }); + + console.log(`[SUCCESS] Choix insérés pour la question ID: ${questionCreate.idQuestion}`); + res.status(200).send({ id: questionCreate.idQuestion }); + } catch (error) { + console.error(`[ERROR] Erreur inattendue:`, error); res.status(500).send({ error: MessageRoute.serverError }); } }); diff --git a/microservices/frontend/src/app/classes/Fetch.ts b/microservices/frontend/src/app/classes/Fetch.ts index da1fa30bc373e1939fddd800d1f3b87f839c2ea5..c10380ad025441df825cb3217b2ae312adde0908 100644 --- a/microservices/frontend/src/app/classes/Fetch.ts +++ b/microservices/frontend/src/app/classes/Fetch.ts @@ -66,6 +66,7 @@ export class Fetch{ }) .then(data => data.json()) .then(data => { + console.log(data); if (!Array.isArray(data)) { reject(new Error(Fetch.messageErrorFormat)); return; @@ -90,8 +91,9 @@ export class Fetch{ address: Fetch.address, route: `created_QCMs/${USER_ID}`, }) - .then(data => data.json()) + .then(data => { return data.json();}) .then(data => { + console.log(data); if (!Array.isArray(data)) { reject(new Error(Fetch.messageErrorFormat)); return; diff --git a/microservices/nginx.conf b/microservices/nginx.conf index b9143be3a99387981ae3c0bff273c165f5f80f21..11d7a79c9fa7f9bd77b943a6f62a0f091b51b576 100644 --- a/microservices/nginx.conf +++ b/microservices/nginx.conf @@ -154,6 +154,18 @@ proxy_set_header Authorization $http_authorization; include cors.conf; } + location /infos_QCM/ { + proxy_pass http://service-search-qcm:30992; + proxy_pass_request_headers on; + proxy_set_header Authorization $http_authorization; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + include cors.conf; +} + + location /true_false_question { proxy_pass http://service-creation-qcm:30992; proxy_set_header Host $host; @@ -178,6 +190,8 @@ proxy_set_header Authorization $http_authorization; include cors.conf; } + + }