diff --git a/express-server/db-connect/db-connect.js b/express-server/db-connect/db-connect.js index 4b0b1521..cd10b6a1 100644 --- a/express-server/db-connect/db-connect.js +++ b/express-server/db-connect/db-connect.js @@ -1,3 +1,4 @@ +var push = require('../push/push'); const { query, nonQuery @@ -11,8 +12,8 @@ const stringSimilarity = require('string-similarity'); async function updateUser(uid, mid, name, picture, email) { try { - await nonQuery('INSERT INTO "User" (username, message_id, name, picture, email) VALUES ($1, $2, $3, $4, $5);', [uid, mid, name, picture, email]); - + await nonQuery('INSERT INTO "User" (username, name, picture, email, message_id) VALUES ($1, $2, $3, $4, $5);', [uid, name, picture, email, mid]); + } catch (error) { console.error(error); } @@ -20,8 +21,8 @@ async function updateUser(uid, mid, name, picture, email) { async function getmessageids(sl_id) { try { - let members = query('SELECT * FROM "Shoppinglist_member" WHERE sl_id = $1;', [sl_id]); - let admin = query('SELECT * FROM "Shoppinglist_admin" WHERE sl_id = $1;', [sl_id]); + let members = await query('SELECT row_to_json("User") AS obj FROM "Shoppinglist_member" JOIN "User" USING (username) WHERE sl_id = $1;', [sl_id]); + let admin = await query('SELECT row_to_json("User") AS obj FROM "Shoppinglist_admin" JOIN "User" USING (username) WHERE sl_id = $1;', [sl_id]); return users_to_array(admin, members); } catch (error) { @@ -193,6 +194,7 @@ async function addGroup(sl_id, name, color, hidden) { } catch (error) { console.error(error); } + push.sendMultiplePush(await getmessageids(sl_id), "Gruppe wurde hinzugefügt!", "Die Gruppe " + name + " wurde hinzugefügt!"); } //add item into group @@ -204,6 +206,7 @@ async function addItem(group_id, sl_id, name, count) { } catch (error) { console.error(error); } + push.sendMultiplePush(await getmessageids(sl_id), "Item wurde hinzugefügt!", "Das Item " + name + " wurde hinzugefügt!"); } //Edit Group @@ -226,6 +229,8 @@ async function editGroup(sl_id, group_id, name, color, hidden) { } catch (error) { console.error(error); } + + push.sendMultiplePush(await getmessageids(sl_id), "Gruppe wurde bearbeitet!", "Die Gruppe " + name + " wurde bearbeitet!"); } //Edit Item @@ -245,6 +250,7 @@ async function editItem(sl_id, group_id, item_id, name, count) { } catch (error) { console.error(error); } + push.sendMultiplePush(await getmessageids(sl_id), "Item wurde bearbeitet!", "Das Item " + name + " wurde bearbeitet!"); } //Delete Group @@ -259,6 +265,8 @@ async function deleteGroup(group_id, sl_id) { } catch (error) { console.error(error); } + + push.sendMultiplePush(await getmessageids(sl_id), "Gruppe wurde gelöscht!", "Die Gruppe " + name + " wurde gelöscht!"); } //Delete Item @@ -269,6 +277,7 @@ async function deleteItem(item_id, group_id, sl_id) { } catch (error) { console.error(error); } + push.sendMultiplePush(await getmessageids(sl_id), "Item wurde gelöscht!", "Das Item " + name + " wurde gelöscht!"); } //Move to Done Purchases (delete items from shoppinglist & move into done_purchases table) @@ -294,18 +303,22 @@ async function moveDoneItems(uid, sl_id, billcontent) { today = mm + '/' + dd + '/' + yyyy; + //Insert Into Done Purchases Table for (let item of removeableItems) { await nonQuery('INSERT INTO "Done_Purchase" (purchased_item_id, username, name, date, count) VALUES($1,$2,$3,$4,$5);', - [generate_item_id(), uid, item.name, today, 1]); + [generate_item_id(), uid, item.item.name, today, item.count]); } + //Update count From Item Table for (let item of removeableItems) { - await nonQuery('DELETE FROM "Item" WHERE item_id = $1 AND group_id = $2 AND sl_id = $3;', [item.item_id, item.group_id, item.sl_id]); - console.log(item); - + await nonQuery('UPDATE "Item" SET count = count - $4 WHERE item_id = $1 AND group_id = $2 AND sl_id = $3;', [item.item.item_id, item.item.group_id, item.item.sl_id, item.count]); } + //Chech if item count = 0 and delete + + await nonQuery('DELETE FROM "Item" WHERE count = 0;') + return "done" } catch (error) { console.error(error); @@ -497,10 +510,10 @@ function generateInviteLink() { function users_to_array(admin, members) { let users = []; - users.push(admin.username); + users.push(admin[0].message_id); for (let item of members) { - users.push(item.username); + users.push(item.message_id); } return users; @@ -513,17 +526,14 @@ function compareData(listitems, doneitems) { let output = []; for (let item of listitems) { - if (doneitems.includes(item.name)) { + + if (probability(item.name, doneitems).best > 0.6) { + output.push({item: item, count: probability(item.name, doneitems).count}); + } else if (probability(item.name.toUpperCase(), doneitems.toUpperCase()).best > 0.6) { + output.push({item: item, count: probability(item.name, doneitems).count}); output.push(item); - } else if (doneitems.toUpperCase().includes(item.name.toUpperCase())) { - output.push(item); - } else if (doneitems.toLowerCase().includes(item.name.toLowerCase())) { - output.push(item); - } else if (probability(item.name, doneitems) > 0.6) { - output.push(item); - } else if (probability(item.name.toUpperCase(), doneitems.toUpperCase()) > 0.6) { - output.push(item); - } else if (probability(item.name.toLowerCase(), doneitems.toLowerCase()) > 0.6) { + } else if (probability(item.name.toLowerCase(), doneitems.toLowerCase()).best > 0.6) { + output.push({item: item, count: probability(item.name, doneitems).count}); output.push(item); } } @@ -532,19 +542,33 @@ function compareData(listitems, doneitems) { } function probability(cur_item, data) { - let best = 0; + let pos; + let count = 0; + let numbers = "123456789"; + for (let i = 0; i < data.length; i++) { let prob = stringSimilarity.compareTwoStrings(cur_item, data.slice(i, i + cur_item.length)); if (prob > best) { best = prob; + pos = i; } } - return best; + for(let i = pos; i >= 0; i--) { + if(numbers.includes(data.charAt(i)) == true) { + count = data.charAt(i); + break; + } + + } + + return { + best: best, count: count + }; } diff --git a/express-server/public/javascripts/ajax.js b/express-server/public/javascripts/ajax.js index 6fd53843..67ffd54c 100644 --- a/express-server/public/javascripts/ajax.js +++ b/express-server/public/javascripts/ajax.js @@ -346,7 +346,12 @@ function Detail() { `); for (let x = 0; x < el.content.length; x++) { const el2 = el.content[x] - $(`.${el.name}`).append(`
`); + $(`.${el.name}`).append(`
+
+
+ ${el2.name}${el2.count} +
+
`); } } lala(); diff --git a/express-server/public/javascripts/login.js b/express-server/public/javascripts/login.js index 0bedf748..b8338d65 100644 --- a/express-server/public/javascripts/login.js +++ b/express-server/public/javascripts/login.js @@ -22,7 +22,7 @@ function checkAuth() { console.error("Get id token client error: ", error) }); } catch { - console.error("checkAuth error: ") + console.error("checkAuth error: "); } // document.getElementById("loginbutton").style.display = "none"; @@ -31,8 +31,7 @@ function checkAuth() { // document.getElementById("loginbutton").style.display = "block"; console.log("Check Auth error", user) } - }) - var user = firebase.auth().currentUser; + }); } window.onload = function () { checkAuth(); diff --git a/express-server/public/stylesheets/style.css b/express-server/public/stylesheets/style.css index 35569f01..48c2b462 100644 --- a/express-server/public/stylesheets/style.css +++ b/express-server/public/stylesheets/style.css @@ -94,4 +94,8 @@ button:focus{ .btn:focus, .btn:active { outline: none !important; box-shadow: none !important; +} + +.itemcard{ + height: 2%; } \ No newline at end of file diff --git a/express-server/push/push.js b/express-server/push/push.js index 7f2d5457..4f3419a8 100644 --- a/express-server/push/push.js +++ b/express-server/push/push.js @@ -1,4 +1,4 @@ - +var admin = require('firebase-admin'); function sendPush(msgtoken, title, text){ var message = { @@ -9,7 +9,7 @@ function sendPush(msgtoken, title, text){ token: msgtoken }; - firebaseAdmin.messaging().send(message) + admin.messaging().send(message) .then(function(response) { // See the MessagingDevicesResponse reference documentation for // the contents of response. @@ -20,6 +20,12 @@ function sendPush(msgtoken, title, text){ }); } + +function sendMultiplePush(message_ids, title, text){ + for(var i = 0; i < message_ids.length; i++){ + sendPush(message_ids[i], title, text); + } +} module.exports = { - sendPush + sendPush,sendMultiplePush } \ No newline at end of file diff --git a/express-server/routes/index.js b/express-server/routes/index.js index 961383d9..f63d85c8 100644 --- a/express-server/routes/index.js +++ b/express-server/routes/index.js @@ -17,6 +17,7 @@ var firebaseAdmin = admin.initializeApp({ //Push router.get('/push/:msgtoken/:message/:title', function (req, res, next) { + push.sendPush(req.params.msgtoken, req.params.title, req.params.message); var sender = "Message Token: " + req.params.msgtoken + " Message: " + req.params.message + " Title: " + req.params.title; res.status(200).send(sender); diff --git a/express-server/views/index.ejs b/express-server/views/index.ejs index 7c793ec7..a634c995 100644 --- a/express-server/views/index.ejs +++ b/express-server/views/index.ejs @@ -16,9 +16,9 @@ - + - +