diff --git a/.gitignore b/.gitignore index 8f5e467..aeee148 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules package-lock.json -.env \ No newline at end of file +.env +assets \ No newline at end of file diff --git a/app.js b/app.js index deec11a..d691dc7 100644 --- a/app.js +++ b/app.js @@ -9,6 +9,9 @@ const loginuUser = require("./router/Auth"); const createSurvey = require("./router/survey"); const joinSurvey = require("./router/joinSurvey"); const showOtherSurveys = require("./router/otherSurveys"); +const surveyResponses = require("./router/surveyResponses"); +const download = require("./router/report"); +const responseDetail = require("./router/responseDetail"); const port = process.env.PORT || 8000; const url = process.env.DBURL; const cors = require("cors"); @@ -35,6 +38,10 @@ app.use("/login", loginuUser); app.use("/survey", isAuth, createSurvey); app.use("/join", isAuth, joinSurvey); app.use("/otherSurveys", isAuth, showOtherSurveys); +app.use("/responses", isAuth, surveyResponses); +app.use("/download", download); +app.use("/responsedetail", responseDetail); + app.listen(port, () => { console.log(`Server is listning on port ${port}`); }); diff --git a/assets/report.csv b/assets/report.csv new file mode 100644 index 0000000..02d46b5 --- /dev/null +++ b/assets/report.csv @@ -0,0 +1,4 @@ +select any one option from given options.,choose maximum options from given options.,what is your name ?,where are you living ?,Your Phone No ?,what is your age ?, +Lahore ,pqr abc ,ali ,lahore ,6 ,12 , +Multan ,pqr ,fd ,d ,4 ,1 , +Multan ,xyz abc ,ali ,sdsa ,3 ,1 , diff --git a/controller/joinSurvey.js b/controller/joinSurvey.js index 0aa2fa5..bbbcdae 100644 --- a/controller/joinSurvey.js +++ b/controller/joinSurvey.js @@ -1,5 +1,5 @@ const Survey = require("../models/survey"); -const response = require("../models/joinSurvey"); +const Responses = require("../models/responses"); const joi = require("joi"); const { ObjectId } = require("mongoose").Types; @@ -10,7 +10,7 @@ const validateSurveyAccess = async (req, res, next) => { return res.status(401).json("You can not access this survey"); } - const isFilled = await response.find({ + const isFilled = await Responses.find({ surveyId: req.params.id, userId: req.user._id, }); @@ -39,7 +39,7 @@ const submitResponse = async (req, res) => { }; }), id = ObjectId(surveyId); - const result = new response({ + const result = new Responses({ userId: req.user._id, surveyId: id, answers: answer, diff --git a/controller/report.js b/controller/report.js new file mode 100644 index 0000000..8d71d81 --- /dev/null +++ b/controller/report.js @@ -0,0 +1,43 @@ +const Survey = require("../models/survey"); +const Responses = require("../models/responses"); +const fs = require("fs"); + +const report = async (req, res) => { + let path = __dirname; + path = path.replace("controller", ""); + path = path + "assets/report.csv"; + + try { + const survey = await Survey.findById(req.params.id).select( + "questions -_id" + ); + const responses = await Responses.find({ surveyId: req.params.id }).select( + "answers.options -_id" + ); + + const fd = fs.openSync(path, "w"); + + survey.questions.forEach((question) => + fs.writeSync(fd, question.title + ",") + ); + fs.writeSync(fd, "\n"); + + for (let i = 0; i < responses.length; i++) { + for (let j = 0; j < responses[i].answers.length; j++) { + if (responses[i].answers[j].options.length >= 2) { + responses[i].answers[j].options = + responses[i].answers[j].options.join(" "); + } + fs.writeSync(fd, responses[i].answers[j].options + " ,"); + } + fs.writeSync(fd, "\n"); + } + fs.closeSync(fd); + + res.status(200).sendFile(path); + } catch (err) { + res.status(500).json(err.message); + } +}; + +module.exports = report; diff --git a/controller/responseDetail.js b/controller/responseDetail.js new file mode 100644 index 0000000..a1b57f6 --- /dev/null +++ b/controller/responseDetail.js @@ -0,0 +1,13 @@ +const Responses = require("../models/responses"); +const { ObjectId } = require("mongoose").Types; + +const responseDetail = async (req, res) => { + const person = await Responses + .find({ userId: ObjectId(req.params.id) }) + .populate("userId") + .select("name email"); + + res.status(200).json(person[0].userId); +}; + +module.exports = responseDetail; \ No newline at end of file diff --git a/controller/survey.js b/controller/survey.js index 6451498..a0fc678 100644 --- a/controller/survey.js +++ b/controller/survey.js @@ -1,5 +1,5 @@ const Survey = require("../models/survey"); -const Responses = require("../models/joinSurvey"); +const Responses = require("../models/responses"); const jwt = require("jsonwebtoken"); const config = require("../config/config"); const joi = require("joi"); diff --git a/controller/surveyResponses.js b/controller/surveyResponses.js new file mode 100644 index 0000000..26e63fc --- /dev/null +++ b/controller/surveyResponses.js @@ -0,0 +1,12 @@ +const Responses = require("../models/responses"); + +const surveyResponses = async (req, res) => { + try { + const surveys = await Responses.find({ surveyId: req.params.id }); + res.status(200).json(surveys); + } catch (err) { + res.status(400).json("Survey not found"); + } +}; + +module.exports = surveyResponses; diff --git a/models/joinSurvey.js b/models/responses.js similarity index 94% rename from models/joinSurvey.js rename to models/responses.js index 6c0bdbd..7a908d5 100644 --- a/models/joinSurvey.js +++ b/models/responses.js @@ -1,4 +1,3 @@ -const { string } = require("joi"); const mongoose = require("mongoose"); const { Schema, ObjectId } = mongoose; diff --git a/router/joinSurvey.js b/router/joinSurvey.js index e2e8ec2..04041dc 100644 --- a/router/joinSurvey.js +++ b/router/joinSurvey.js @@ -1,8 +1,8 @@ const express = require("express"); const route = express.Router(); -const joinSurvey = require("../controller/joinSurvey"); +const Responses = require("../controller/joinSurvey"); -route.get("/:id", joinSurvey.validateSurveyAccess); -route.post("/", joinSurvey.submitResponse); +route.get("/:id", Responses.validateSurveyAccess); +route.post("/", Responses.submitResponse); module.exports = route; diff --git a/router/report.js b/router/report.js new file mode 100644 index 0000000..af7b6e6 --- /dev/null +++ b/router/report.js @@ -0,0 +1,7 @@ +const express = require("express"); +const router = express.Router(); +const report = require("../controller/report.js"); + +router.get("/:id", report); + +module.exports = router; diff --git a/router/responseDetail.js b/router/responseDetail.js new file mode 100644 index 0000000..05b3082 --- /dev/null +++ b/router/responseDetail.js @@ -0,0 +1,7 @@ +const express = require("express"); +const router = express.Router(); +const responseDetail = require("../controller/responseDetail.js"); + +router.get("/:id", responseDetail); + +module.exports = router; diff --git a/router/surveyResponses.js b/router/surveyResponses.js new file mode 100644 index 0000000..5a3bd95 --- /dev/null +++ b/router/surveyResponses.js @@ -0,0 +1,7 @@ +const express = require("express"); +const router = express.Router(); +const surveyResponses = require("../controller/surveyResponses.js"); + +router.get("/:id", surveyResponses); + +module.exports = router;