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 @@