diff --git a/graphql/resolvers/annonce.js b/graphql/resolvers/annonce.js index f7f064e6810c42610bd77bff41a58c6d8784c29e..61172178b7d2bac15fe913935534fc5fa9623349 100644 --- a/graphql/resolvers/annonce.js +++ b/graphql/resolvers/annonce.js @@ -1,5 +1,7 @@ const Annonce = require("../../models/annonce"); const annonce = require("../../service/AnnonceService"); +const Reponse = require("../../models/reponse"); +const reponse = require("../../service/ReponseService"); module.exports = { annonces: async () => { @@ -24,6 +26,29 @@ module.exports = { throw error } }, + + searchAnnonces: async args => { + try { + const annonces = await Annonce.find(args.annonce) + .populate({ + path : 'questions', + populate : { + path : 'utilisateur' + }}) + .populate({ + path : 'questions', + populate : { + path : 'reponses', + populate : { + path : 'utilisateur' + } + } + }); + return annonces; + } catch (error) { + throw error + } + }, createAnnonce: async args => { try { @@ -55,4 +80,96 @@ module.exports = { throw error } }, + + reponses: async () => { + try { + const reponses = Reponse.find() + .populate({ + path: "utilisateur" + }); + + return reponses; + } catch (error) { + throw error + } + }, + + searchReponse: async args => { + try { + const reponses = Reponse.find(args.reponse) + .populate({ + path: "utilisateur" + }); + + return reponses; + } catch (error) { + throw error + } + }, + + createReponse: async args => { + try { + const questionId = args.questionId; + const utilisateurId = args.utilisateurId; + const laReponse = args.reponse; + + reponse.addReponse("", utilisateurId, questionId, laReponse); + return "La réponse a bien été créée"; + } catch (error) { + throw error + } + }, + + updateReponse: async args => { + try { + const reponseId = args.reponseId; + const laReponse = args.reponse; + + const res = await new Promise(function(resolve, reject) { + Reponse.findByIdAndUpdate(reponseId, {reponse: laReponse}, { useFindAndModify: false }) + .then(data =>{ + resolve(data); + }) + .catch(err => { + const error = {error : err.message}; + resolve(error); + }); + }); + + if(res === null || ("error" in res)) + return "La réponse " + reponseId + " n'existe pas"; + + return "La réponse a bien été modifiée"; + + } catch (error) { + throw error + } + }, + + deleteReponse: async args => { + try { + const reponseId = args.reponseId; + + const res = await new Promise(function(resolve, reject) { + Reponse.findByIdAndDelete(reponseId) + .then(data => { + Question.findOneAndUpdate({reponses: reponseId}, {$pull: {reponses: new ObjectID(reponseId)}}).then() + + resolve(data); + }) + .catch(err => { + const error = {error : err.message}; + resolve(error); + }); + }); + + if(res === null || ("error" in res)) + return "La réponse " + reponseId + " n'existe pas"; + + return "La réponse a bien été supprimée"; + + } catch (error) { + throw error + } + } } \ No newline at end of file diff --git a/graphql/schema/annonce.js b/graphql/schema/annonce.js index c6f9e4c4102375d1a8d7c970f4ebf98902ac4038..619760d1c0f01d21efd719c9c5b39a3389ede854 100644 --- a/graphql/schema/annonce.js +++ b/graphql/schema/annonce.js @@ -46,7 +46,7 @@ module.exports = buildSchema(` photos: [String] } - input AnnonceUpdateInput { + input AnnonceUpdateInput { titre: String typeBien: String statusPublication: String @@ -57,14 +57,36 @@ module.exports = buildSchema(` photos: [String] } + input SearchAnnonceInput { + _id: ID + titre: String + typeBien: String + statusPublication: String + statusBien: String + description: String + prixBien: Int + dateDisponibilite: String + } + + input SearchReponseInput { + _id: ID + utilisateur: ID + } + type Query { annonces:[Annonce!] + searchAnnonces(annonce:SearchAnnonceInput): [Annonce!] + reponses:[Reponse!] + searchReponse(reponse:SearchReponseInput): [Reponse!] } type Mutation { createAnnonce(annonce: AnnonceInput): String updateAnnonce(idAnnonce: ID!,annonce:AnnonceUpdateInput): Annonce deleteAnnonce(annonceId: ID!): String + createReponse(utilisateurId: ID!, questionId: ID!, reponse: String!): String + updateReponse(reponseId: ID!, reponse: String!): String + deleteReponse(reponseId: ID!): String } schema {