Invite Link
Einladungslink erstellen und über diesen zu shoppinglist eingeladen werden
This commit is contained in:
		@@ -80,13 +80,11 @@ async function generateUser() {
 | 
				
			|||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//get shoppinglist content
 | 
					//get shoppinglist content
 | 
				
			||||||
async function displayShoppinglist(sl_id) {
 | 
					async function displayShoppinglist(sl_id, username) {
 | 
				
			||||||
    try {
 | 
					    try {
 | 
				
			||||||
        let groups = await query('SELECT row_to_json("Group") AS obj FROM "Group" JOIN "Shoppinglist" USING (sl_id) WHERE sl_id = $1;', [sl_id]);
 | 
					        let groups = await query('SELECT row_to_json("Group") AS obj FROM "Group" JOIN "Shoppinglist" USING (sl_id) WHERE sl_id = $1;', [sl_id]);
 | 
				
			||||||
        let items = await query('SELECT row_to_json("Item") AS obj FROM "Item" JOIN "Group" USING (group_id) WHERE "Group".sl_id = $1;', [sl_id]);
 | 
					        let items = await query('SELECT row_to_json("Item") AS obj FROM "Item" JOIN "Group" USING (group_id) WHERE "Group".sl_id = $1;', [sl_id]);
 | 
				
			||||||
        return items_in_groups(groups, items, sl_id);
 | 
					        return items_in_groups(groups, items, sl_id);
 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    catch (error) {
 | 
					    catch (error) {
 | 
				
			||||||
@@ -135,6 +133,35 @@ async function addItem(group_id, sl_id, name, count) {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Invite System
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					async function verifyInvite(link, user_id) {
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					        let result = await query('SELECT row_to_json("Shoppinglist") AS obj FROM "Shoppinglist" WHERE invitelink = $1;', [link]);
 | 
				
			||||||
 | 
					        let sl_id = result[0].sl_id;
 | 
				
			||||||
 | 
					        console.log(result[0].sl_id);
 | 
				
			||||||
 | 
					        await nonQuery('INSERT INTO "Shoppinglist_member" (username, sl_id) VALUES ($1, $2);', [user_id, sl_id]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    catch (error) {
 | 
				
			||||||
 | 
					        console.error(error);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					async function createInvite(sl_id) {
 | 
				
			||||||
 | 
					    try {
 | 
				
			||||||
 | 
					        let link = generateInviteLink();
 | 
				
			||||||
 | 
					        await nonQuery('UPDATE "Shoppinglist" SET invitelink = $1 WHERE sl_id = $2;', [link, sl_id]);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    catch (error) {
 | 
				
			||||||
 | 
					        console.error(error);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
//sl_id generieren
 | 
					//sl_id generieren
 | 
				
			||||||
@@ -193,7 +220,19 @@ function items_in_groups(groups, items, sl_id) {
 | 
				
			|||||||
    return result;
 | 
					    return result;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//Create invite link for your own shoppinglist
 | 
				
			||||||
 | 
					function generateInviteLink() {
 | 
				
			||||||
 | 
					    var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
 | 
				
			||||||
 | 
					    var output = "";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    for(let i = 0; i < 50; i++) {
 | 
				
			||||||
 | 
					        output += possible.charAt(Math.floor(Math.random() * possible.length));
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return output;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = {
 | 
					module.exports = {
 | 
				
			||||||
    getShoppinglistsAdmin, getShoppinglistsShared, newShoppinglist, displayShoppinglist, deleteShoppinglist, addGroup,
 | 
					    getShoppinglistsAdmin, getShoppinglistsShared, newShoppinglist, displayShoppinglist, deleteShoppinglist, addGroup,
 | 
				
			||||||
    addItem
 | 
					    addItem, verifyInvite, createInvite
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -109,7 +109,7 @@ router.post("/shoppinglist", async function(req, res, next) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
router.get("/shoppinglist_json/:sl_id", async (req, res) => {
 | 
					router.get("/shoppinglist_json/:sl_id", async (req, res) => {
 | 
				
			||||||
  try {
 | 
					  try {
 | 
				
			||||||
    res.status(200).send(await postgres.displayShoppinglist(req.params.sl_id));
 | 
					    res.status(200).send(await postgres.displayShoppinglist(req.params.sl_id, req.session.passport.user.profile.id));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  catch(err) {
 | 
					  catch(err) {
 | 
				
			||||||
@@ -146,20 +146,45 @@ router.post("/group", async (req, res) => {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
router.post("/item", async (req, res) => {
 | 
					router.post("/item", async (req, res) => {
 | 
				
			||||||
  try {
 | 
					  try {
 | 
				
			||||||
   res.status(200).send(postgres.addItem(req.body.group_id, req.body.sl_id, req.body.name, req.body.count));
 | 
					   res.status(200).send(await postgres.addItem(req.body.group_id, req.body.sl_id, req.body.name, req.body.count));
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  catch (err) {
 | 
					  catch (err) {
 | 
				
			||||||
    res.status(400).send(err);
 | 
					    res.status(400).send(await err);
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
router.get("/test1", (req, res) => {
 | 
					router.get("/test1", (req, res) => {
 | 
				
			||||||
  res.render("index1");
 | 
					    res.render("index1");
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
router.get("/userinfo_json", (req, res) => {
 | 
					router.get("/userinfo_json", (req, res) => {
 | 
				
			||||||
  res.send(req.session.passport.user);
 | 
					  res.send(req.session.passport.user);
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Invite System
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					router.post("/invite", async (req, res) => {
 | 
				
			||||||
 | 
					  try {
 | 
				
			||||||
 | 
					    res.status(200).send(await postgres.createInvite(req.body.sl_id));
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  catch(err) {
 | 
				
			||||||
 | 
					    res.status(400).send(await err);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					router.get("/invite/:link", async (req, res) => {
 | 
				
			||||||
 | 
					  try {
 | 
				
			||||||
 | 
					    await postgres.verifyInvite(req.params.link, req.session.passport.user.profile.id);
 | 
				
			||||||
 | 
					    res.redirect("/test1");
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  catch(err) {
 | 
				
			||||||
 | 
					    res.redirect("/test1");
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = router;
 | 
					module.exports = router;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,6 +17,7 @@
 | 
				
			|||||||
      <br>
 | 
					      <br>
 | 
				
			||||||
      <div class="col s6">
 | 
					      <div class="col s6">
 | 
				
			||||||
        <a href="/logout" class="waves-effect waves-light btn">Logout</a>
 | 
					        <a href="/logout" class="waves-effect waves-light btn">Logout</a>
 | 
				
			||||||
 | 
					        <a class="waves-effect waves-light red btn btn_invite">Create Invite Link</a>
 | 
				
			||||||
    </div>
 | 
					    </div>
 | 
				
			||||||
      <br>
 | 
					      <br>
 | 
				
			||||||
    <div class="row">
 | 
					    <div class="row">
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user