فهرست منبع

Add the ability to create new account with a square user.

Lee Morgan 5 سال پیش
والد
کامیت
d6a35bd3f4
7فایلهای تغییر یافته به همراه48 افزوده شده و 37 حذف شده
  1. 1 1
      controllers/ingredientData.js
  2. 1 1
      controllers/merchantData.js
  3. 2 2
      controllers/otherData.js
  4. 1 1
      controllers/renderer.js
  5. 39 29
      controllers/squareData.js
  6. 3 3
      middleware.js
  7. 1 0
      models/merchant.js

+ 1 - 1
controllers/ingredientData.js

@@ -84,7 +84,7 @@ module.exports = {
                         if(res.locals.merchant.inventory[i].quantity !== req.body.quantity){
                             new InventoryAdjustment({
                                 date: new Date(),
-                                merchant: req.session.user,
+                                merchant: req.session.owner,
                                 ingredient: req.body.id,
                                 quantity: req.body.quantity - res.locals.merchant.inventory[i].quantity
                             }).save().catch(()=>{});

+ 1 - 1
controllers/merchantData.js

@@ -108,7 +108,7 @@ module.exports = {
 
                     adjustments.push(new InventoryAdjustment({
                         date: Date.now(),
-                        merchant: req.session.user,
+                        merchant: req.session.owner,
                         ingredient: req.body[i].id,
                         quantity: req.body[i].quantity - updateIngredient.quantity,
                     }));

+ 2 - 2
controllers/otherData.js

@@ -47,7 +47,7 @@ module.exports = {
                                 await merchant.save();
                             }
 
-                            req.session.user = merchant.session.sessionId;
+                            req.session.owner = merchant.session.sessionId;
                             return res.redirect("/dashboard");
                         }else{
                             req.session.error = "INVALID EMAIL OR PASSWORD";
@@ -71,7 +71,7 @@ module.exports = {
     Redirects to /
     */
     logout: function(req, res){
-        req.session.user = undefined;
+        req.session.owner = undefined;
 
         return res.redirect("/");
     },

+ 1 - 1
controllers/renderer.js

@@ -14,7 +14,7 @@ module.exports = {
 
     //GET: Renders the login page
     loginPage: function(req, res){
-        if(req.session.user !== undefined) return res.redirect("/dashboard");
+        if(req.session.owner !== undefined) return res.redirect("/dashboard");
         return res.render("otherPages/login", {banner: res.locals.banner});
     },
 

+ 39 - 29
controllers/squareData.js

@@ -1,3 +1,4 @@
+const Owner = require("../models/owner.js");
 const Merchant = require("../models/merchant.js");
 const Recipe = require("../models/recipe.js");
 const Transaction = require("../models/transaction.js");
@@ -23,8 +24,8 @@ module.exports = {
         }
         let email = req.body.email.toLowerCase();
 
-        let potentialMerchant = await Merchant.findOne({email: email})
-        if(potentialMerchant !== null){
+        let potentialOwner = await Owner.findOne({email: email})
+        if(potentialOwner !== null){
             req.session.error = "USER WITH THIS EMAIL ADDRESS ALREADY EXISTS";
             return res.redirect("/login");
         }
@@ -35,25 +36,34 @@ module.exports = {
         let salt = bcrypt.genSaltSync(10);
         let hash = bcrypt.hashSync(req.body.password, salt);
 
-        let merchant = new Merchant({
-            name: req.body.name,
+        let owner = new Owner({
             email: email,
             password: hash,
-            pos: "square",
-            status: ["unverified"],
-            inventory: [],
-            recipes: [],
             square: {},
             createdAt: new Date(),
+            status: ["unverified"],
             session: {
                 sessionId: helper.generateId(25),
                 expiration: expirationDate
-            }
+            },
+            merchants: []
         });
 
-        merchant.save()
+        let merchant = new Merchant({
+            owner: owner._id,
+            name: req.body.name,
+            pos: "square",
+            inventory: [],
+            recipes: [],
+            square: {},
+            createdAt: new Date()
+        });
+
+        owner.merchants.push(merchant._id);
+
+        Promise.all([owner.save(), merchant.save()])
             .then((response)=>{
-                req.session.user = merchant.session.sessionId;
+                req.session.owner = response[0].session.sessionId;
                 return res.redirect(`${process.env.SQUARE_ADDRESS}/oauth2/authorize?client_id=${process.env.SUBLINE_SQUARE_APPID}&scope=INVENTORY_READ+ITEMS_READ+MERCHANT_PROFILE_READ+ORDERS_READ+PAYMENTS_READ`);
             })
             .catch((err)=>{
@@ -76,47 +86,47 @@ module.exports = {
         }
 
         let merchant = {};
-
-        let localMerchant = Merchant.findOne({"session.sessionId": req.session.user});
+        let owner = Owner.findOne({"session.sessionId": req.session.owner}).populate("merchants");
         let squareMerchant = axios.post(url, data);
-        Promise.all([localMerchant, squareMerchant])
+        Promise.all([owner, squareMerchant])
             .then((response)=>{
                 if(response[0] === null) throw "ERROR: UNABLE TO CREATE ACCOUNT";
 
-                merchant = response[0];
+                owner = response[0];
+                merchant = response[0].merchants[0];
 
-                merchant.square = {
+                owner.square = {
                     id: response[1].data.merchant_id,
                     expires: new Date(response[1].data.expires_at),
                     refreshToken: response[1].data.refresh_token,
                     accessToken: response[1].data.access_token
                 };
 
-                return axios.get(`${process.env.SQUARE_ADDRESS}/v2/merchants/${merchant.square.id}`, {
-                    headers: {Authorization: `Bearer ${merchant.square.accessToken}`}
+                return axios.get(`${process.env.SQUARE_ADDRESS}/v2/merchants/${owner.square.id}`, {
+                    headers: {Authorization: `Bearer ${owner.square.accessToken}`}
                 });
             })    
             .then((response)=>{
-                merchant.square.location = response.data.merchant.main_location_id;
+                merchant.locationId = response.data.merchant.main_location_id;
 
                 let items = axios.post(`${process.env.SQUARE_ADDRESS}/v2/catalog/search`, {
                     object_types: ["ITEM"]
                 }, {
                     headers: {
-                        Authorization: `Bearer ${merchant.square.accessToken}`
+                        Authorization: `Bearer ${owner.square.accessToken}`
                     }
                 });
 
-                let location = axios.get(`${process.env.SQUARE_ADDRESS}/v2/locations/${merchant.square.location}`, {
+                let location = axios.get(`${process.env.SQUARE_ADDRESS}/v2/locations/${merchant.locationId}`, {
                     headers: {
-                        Authorization: `Bearer ${merchant.square.accessToken}`
+                        Authorization: `Bearer ${owner.square.accessToken}`
                     }
                 });
 
                 return Promise.all([items, location]);
             })
             .then((response)=>{
-                if(merchant.email === response[1].data.location.business_email) merchant.status = [];
+                if(owner.email === response[1].data.location.business_email) merchant.status = [];
                 let recipes = [];
                 
                 for(let i = 0; i < response[0].data.objects.length; i++){
@@ -149,21 +159,21 @@ module.exports = {
                     }
                 }
     
-                return Promise.all([Recipe.create(recipes), merchant.save()]);
+                return Promise.all([Recipe.create(recipes), owner.save()]);
             })
             .then((response)=>{
-                req.session.user = response[1].session.sessionId;
+                req.session.owner = response[1].session.sessionId;
     
                 res.redirect("/dashboard");
 
                 let body = {
-                    location_ids: [merchant.square.location],
+                    location_ids: [merchant.locationId],
                     limit: 10000,
                     query: {}
                 };
                 let options = {
                     headers: {
-                        Authorization: `Bearer ${merchant.square.accessToken}`,
+                        Authorization: `Bearer ${owner.square.accessToken}`,
                         "Content-Type": "application/json"
                     }
                 };
@@ -198,14 +208,14 @@ module.exports = {
                 }
 
                 let body = {
-                    location_ids: [merchant.square.location],
+                    location_ids: [merchant.locationId],
                     limit: 10000,
                     cursor: response.data.cursor,
                     query: {}
                 };
                 let options = {
                     headers: {
-                        Authorization: `Bearer ${merchant.square.accessToken}`,
+                        Authorization: `Bearer ${owner.square.accessToken}`,
                         "Content-Type": "application/json"
                     }
                 };

+ 3 - 3
middleware.js

@@ -4,12 +4,12 @@ const helper = require("./controllers/helper.js");
 
 module.exports = {
     verifySession: function(req, res, next){
-        if(req.session.user === undefined) {
+        if(req.session.owner === undefined) {
             req.session.error = "PLEASE LOG IN";
             return res.redirect("/login");
         }
     
-        Merchant.findOne({"session.sessionId": req.session.user})
+        Merchant.findOne({"session.sessionId": req.session.owner})
             .then((merchant)=>{
                 if(merchant === null){
                     throw "login";
@@ -31,7 +31,7 @@ module.exports = {
             })
             .catch((err)=>{
                 if(err === "login"){
-                    req.session.user = undefined;
+                    req.session.owner = undefined;
                     req.session.error = "PLEASE LOG IN";
                     return res.redirect("/login");
                 }

+ 1 - 0
models/merchant.js

@@ -20,6 +20,7 @@ const MerchantSchema = new mongoose.Schema({
         type: String,
         required: true
     },
+    locationId: String,
     createdAt: {
         type: Date,
         default: new Date()