소스 검색

Create backend for submiting feedback.

Lee Morgan 5 년 전
부모
커밋
52b7d15f60
5개의 변경된 파일68개의 추가작업 그리고 17개의 파일을 삭제
  1. 27 0
      controllers/otherData.js
  2. 4 3
      models/feedback.js
  3. 1 1
      routes.js
  4. 34 11
      views/dashboardPage/js/modal.js
  5. 2 2
      views/dashboardPage/modal.ejs

+ 27 - 0
controllers/otherData.js

@@ -1,4 +1,5 @@
 const Merchant = require("../models/merchant");
+const Feedback = require("../models/feedback.js");
 
 const bcrypt = require("bcryptjs");
 
@@ -73,5 +74,31 @@ module.exports = {
         req.session.user = undefined;
 
         return res.redirect("/");
+    },
+
+    /*
+    POST: create user feedback
+    req.body = {
+        title: String,
+        content: String,
+        date: String (Number, unix time)
+    }
+    response = {}
+    */
+    feedback: function(req, res){
+        let feedback = new Feedback({
+            merchant: res.locals.merchant._id,
+            title: req.body.title,
+            content: req.body.content,
+            date: new Date(req.body.date)
+        });
+
+        feedback.save()
+            .then((feedback)=>{
+                return res.json({});
+            })
+            .catch((err)=>{
+                return res.json("ERROR: UNABLE TO SAVE DATA");
+            });
     }
 }

+ 4 - 3
models/feedback.js

@@ -1,6 +1,6 @@
 const mongoose = require("mongoose");
 
-const feedbackSchema = new mongoose.Schema({
+const FeedbackSchema = new mongoose.Schema({
     merchant: {
         type: mongoose.Schema.Types.ObjectId,
         ref: "Merchant",
@@ -10,9 +10,10 @@ const feedbackSchema = new mongoose.Schema({
         type: String,
         required: [true, "FEEDBACK MUST CONTAIN A TITLE"]
     },
-    contents: {
+    content: {
         type: String,
-        require: [true, "MESSAGE TOO SHORT"]
+        required: [true, "MESSAGE TOO SHORT"],
+        minLength: [10, "MESSAGE TOO SHORT"]
     },
     date: {
         type: Date,

+ 1 - 1
routes.js

@@ -63,6 +63,7 @@ module.exports = function(app){
     //Other
     app.post("/login", otherData.login);
     app.get("/logout", otherData.logout);
+    app.post("/feedback", session, otherData.feedback);
     
     //Information Pages
     app.get("/privacy", informationPages.privacy);
@@ -83,6 +84,5 @@ module.exports = function(app){
     //Square
     app.post("/squarelogin", squareData.redirect);
     app.get("/squareauth", squareData.createMerchant);
-    // app.get("/merchant/create/square", squareData.createMerchant);
     app.get("/recipes/update/square", session, squareData.updateRecipes);
 }

+ 34 - 11
views/dashboardPage/js/modal.js

@@ -2,19 +2,42 @@ let modal = {
     feedback: function(){
         let form = document.getElementById("modalFeedback");
         form.style.display = "flex";
+        form.onsubmit = ()=>{this.submitFeedback()};
+    },
 
-        let merchantInput = document.createElement("input");
-        merchantInput.type = "hidden";
-        merchantInput.name = "merchant";
-        merchantInput.value = merchant.id;
-        form.appendChild(merchantInput);
+    submitFeedback: function(){
+        event.preventDefault();
 
-        let now = new Date();
-        let dateInput = document.createElement("input");
-        dateInput.type = "hidden";
-        dateInput.name = "date";
-        dateInput.value = now.getTime();
-        form.appendChild(dateInput);
+        let data = {
+            title: document.getElementById("feedbackTitle").value,
+            content: document.getElementById("feedbackContent").value,
+            date: new Date()
+        }
+
+        let loader = document.getElementById("loaderContainer");
+        loader.style.display = "flex";
+
+        fetch("/feedback", {
+            method: "post",
+            headers: {
+                "Content-Type": "application/json;charset=utf-8"
+            },
+            body: JSON.stringify(data)
+        })
+            .then(response => response.json())
+            .then((response)=>{
+                if(typeof(response) === "string"){
+                    controller.createBanner(response, "error");
+                }
+                controller.createBanner("THANK YOU FOR YOUR INPUT", "success");
+                controller.closeModal();
+            })
+            .catch((err)=>{
+                controller.createBanner("SOMETHING WENT WRONG. PLEASE REFRESH THE PAGE", "error")
+            })
+            .finally(()=>{
+                loader.style.display = "none";
+            });
     }
 };
 

+ 2 - 2
views/dashboardPage/modal.ejs

@@ -19,10 +19,10 @@
 
             <form id="modalFeedback" style="display:none;" method="post" action="/feedback">
                 <label>Title:
-                    <input type="text" name="title" required>
+                    <input id="feedbackTitle" required>
                 </label>
 
-                <textarea name="content" placeholder="Your Feedback" rows="10" cols="50"></textarea>
+                <textarea id="feedbackContent" placeholder="Your Feedback..." rows="10" cols="50"></textarea>
 
                 <input class="button" type="submit" value="SUBMIT">
             </form>