diff --git a/graphql/resolvers/annonce.js b/graphql/resolvers/annonce.js index 61172178b7d2bac15fe913935534fc5fa9623349..f8d7f3393c4e9d5685e6ec231e1e967e55932ad1 100644 --- a/graphql/resolvers/annonce.js +++ b/graphql/resolvers/annonce.js @@ -3,6 +3,12 @@ const annonce = require("../../service/AnnonceService"); const Reponse = require("../../models/reponse"); const reponse = require("../../service/ReponseService"); +const Question = require("../../models/question") +const question = require("../../service/QuestionService") +const {ObjectId: ObjectID} = require("mongodb"); + +const Reponse = require("../../models/reponse") + module.exports = { annonces: async () => { try { @@ -81,6 +87,96 @@ module.exports = { } }, + questions: async args => { + try { + const questions = await Question.find() + .populate({ + path: 'utilisateur' + }) + .populate({ + path : 'reponses', + populate : { + path : 'utilisateur' + } + + }); + return questions + } catch (error) { + throw error + } + }, + + createQuestion: async args => { + try { + + const argQuestion = args.question; + question.addQuestion(argQuestion.body, argQuestion.idutilisateur, argQuestion.idAnnonce, argQuestion.question); + return "La question a bien été créée." + } catch (error) { + throw error + } + }, + + updateQuestion: async args => { + try { + const questionId = args.idQuestion; + const laQuestion = args.question; + const res = await new Promise(function (resolve, reject) { + Question.findByIdAndUpdate(questionId, {question:laQuestion}, {useFindAndModify: false}) + .then(data => { + console.log(data) + resolve(data); + }) + .catch(err => { + const error = {error: err.message}; + resolve(error); + }); + }); + + if (res === null || ("error" in res)) + return "La question " + questionId + " n'existe pas"; + + return "La Question a bien été modifiée"; + + } catch (error) { + throw error + } + }, + deleteQuestion: async args => { + try { + + const idQuestion = args.idQuestion; + + // Supprime la question dans l'annonce + const idAnnonce = await Annonce.find( {questions : new ObjectID(idQuestion)},{_id:1}); + await Annonce.findByIdAndUpdate( idAnnonce , { '$pull': { 'questions': new ObjectID(idQuestion) } } ); + + // Supprime les réponses à la question que l'on veut supprimer + const getReponses =await Question.find({_id : new ObjectID(idQuestion)},{ "reponses": 1}); + if(getReponses.length > 0) + getReponses[0].reponses.forEach(async element => await Reponse.findByIdAndRemove(new ObjectID(element))) + + const res = await new Promise(function (resolve, reject) { + Question.findByIdAndRemove(idQuestion) + .then(data => { + resolve(data); + }) + .catch(err => { + const error = {error: err.message}; + resolve(error); + }); + }); + + if (res === null || ("error" in res)) + return "La question " + idQuestion + " n'existe pas"; + + return "La Question a bien été supprimée"; + + } catch (error) { + throw error + } + }, + reponses: async () => { try { const reponses = Reponse.find() diff --git a/graphql/schema/annonce.js b/graphql/schema/annonce.js index 619760d1c0f01d21efd719c9c5b39a3389ede854..bf307c680c5786c8515f2e4442f869084d76e076 100644 --- a/graphql/schema/annonce.js +++ b/graphql/schema/annonce.js @@ -57,6 +57,15 @@ module.exports = buildSchema(` photos: [String] } + input QuestionInput { + idUtilisateur: ID + idAnnonce : ID + question: String + } + type Query { + annonces:[Annonce!] + questions:[Question!] + input SearchAnnonceInput { _id: ID titre: String @@ -84,6 +93,11 @@ module.exports = buildSchema(` createAnnonce(annonce: AnnonceInput): String updateAnnonce(idAnnonce: ID!,annonce:AnnonceUpdateInput): Annonce deleteAnnonce(annonceId: ID!): String + + createQuestion(question: QuestionInput): String + updateQuestion(idQuestion: ID!, question: String!):String + deleteQuestion(idQuestion:ID!): String + createReponse(utilisateurId: ID!, questionId: ID!, reponse: String!): String updateReponse(reponseId: ID!, reponse: String!): String deleteReponse(reponseId: ID!): String