From c28d547589b64ffd0d87af44db3dd5d66f789a52 Mon Sep 17 00:00:00 2001 From: Lukas Nowy Date: Sat, 8 Dec 2018 15:57:31 +0100 Subject: [PATCH] Invite Link MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Einladungslink erstellen und über diesen zu shoppinglist eingeladen werden --- express-server/db-connect/db-connect.js | 47 ++++++++++++++++++++++--- express-server/routes/index.js | 33 ++++++++++++++--- express-server/views/index1.ejs | 1 + 3 files changed, 73 insertions(+), 8 deletions(-) diff --git a/express-server/db-connect/db-connect.js b/express-server/db-connect/db-connect.js index 24a9d8d3..b94e887d 100644 --- a/express-server/db-connect/db-connect.js +++ b/express-server/db-connect/db-connect.js @@ -80,13 +80,11 @@ async function generateUser() { } //get shoppinglist content -async function displayShoppinglist(sl_id) { +async function displayShoppinglist(sl_id, username) { 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 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); - - } 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 @@ -193,7 +220,19 @@ function items_in_groups(groups, items, sl_id) { 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 = { getShoppinglistsAdmin, getShoppinglistsShared, newShoppinglist, displayShoppinglist, deleteShoppinglist, addGroup, - addItem + addItem, verifyInvite, createInvite } diff --git a/express-server/routes/index.js b/express-server/routes/index.js index d81e8841..30af474c 100644 --- a/express-server/routes/index.js +++ b/express-server/routes/index.js @@ -109,7 +109,7 @@ router.post("/shoppinglist", async function(req, res, next) { router.get("/shoppinglist_json/:sl_id", async (req, res) => { 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) { @@ -146,20 +146,45 @@ router.post("/group", async (req, res) => { router.post("/item", async (req, res) => { 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) { - res.status(400).send(err); + res.status(400).send(await err); } }); router.get("/test1", (req, res) => { - res.render("index1"); + res.render("index1"); }); router.get("/userinfo_json", (req, res) => { 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; diff --git a/express-server/views/index1.ejs b/express-server/views/index1.ejs index 7c72bc34..3225c2c2 100644 --- a/express-server/views/index1.ejs +++ b/express-server/views/index1.ejs @@ -17,6 +17,7 @@
Logout + Create Invite Link