2019-01-12 15:19:02 +01:00

262 lines
6.7 KiB
JavaScript

const { query, nonQuery } = require("../db-config/postgresql-common");
//SELECT own shopping lists
async function getShoppinglistsAdmin(username) {
try {
let result = await query('SELECT row_to_json("Shoppinglist") AS obj FROM "Shoppinglist" JOIN "Shoppinglist_admin" USING (sl_id) WHERE \
username = $1', [username]);
return result;
}
catch (error) {
console.error(error);
}
}
//SELECT shared shopping lists
async function getShoppinglistsShared(username) {
try {
let result = await query('SELECT row_to_json("Shoppinglist") AS obj FROM "Shoppinglist" JOIN "Shoppinglist_member" USING (sl_id) WHERE \
username = $1', [username]);
console.log(result);
return result;
}
catch (error) {
console.error(error);
}
}
//INSERT new Shoppinglist
async function newShoppinglist(name, description, username, color) {
//generate sl_id
let sl_id = generate_sl_id();
//insert user if not exists
try {
await nonQuery('INSERT INTO "User" (username) VALUES ($1);', [username]);
}
catch (error) {
console.error(error);
}
//insert shoppinglist
try {
await nonQuery('INSERT INTO "Shoppinglist" (sl_id, name, description, color) VALUES ($1, $2, $3, $4);', [sl_id, name, description, color]);
}
catch (error) {
console.error(error);
}
//insert admin
try {
await nonQuery('INSERT INTO "Shoppinglist_admin" (username, sl_id) VALUES ($1, $2);', [username, sl_id]);
}
catch (error) {
console.error(error);
}
}
//rename Shoppinglist
async function renameShoppinglist(sl_id, newname, newdescription, newcolor) {
try {
let shoppinglist = await query('SELECT row_to_json("Shoppinglist") AS obj FROM "Shoppinglist" WHERE sl_id = $1;', [sl_id]);
if(shoppinglist.name != newname) {
await nonQuery('UPDATE "Shoppinglist" SET name = $1 WHERE sl_id = $2;', [newname, sl_id]);
}
if(shoppinglist.description != newdescription) {
await nonQuery('UPDATE "Shoppinglist" SET description = $1 WHERE sl_id = $2;', [newdescription, sl_id]);
}
if(shoppinglist.color != newcolor) {
await nonQuery('UPDATE "Shoppinglist" SET color = $1 WHERE sl_id = $2;', [newcolor, sl_id]);
}
}
catch (error) {
console.error(error);
}
}
async function generateUser() {
//insert user
try {
await nonQuery('INSERT INTO "User" (username) VALUES ($1);', [username]);
}
catch (error) {
console.error(error);
}
}
//get shoppinglist content
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) {
console.error(error);
}
}
//delete shoppinglist
async function deleteShoppinglist(sl_id) {
try {
await nonQuery('DELETE FROM "Shoppinglist_admin" WHERE sl_id = $1', [sl_id]);
await nonQuery('DELETE FROM "Shoppinglist_member" WHERE sl_id = $1', [sl_id]);
await nonQuery('DELETE FROM "Shoppinglist" WHERE sl_id = $1', [sl_id]);
}
catch (error) {
console.error(error);
}
}
//add group into shoppinglist
async function addGroup(sl_id, name, color, hidden) {
try {
let grid = generate_group_id();
await nonQuery('INSERT INTO "Group" (group_id, sl_id, name, color, hidden) VALUES ($1, $2, $3, $4, $5);', [grid, sl_id, name, color, hidden]);
}
catch (error) {
console.error(error);
}
}
//add item into group
async function addItem(group_id, sl_id, name, count) {
try {
let itid = generate_item_id();
await nonQuery('INSERT INTO "Item" VALUES ($1, $2, $3, $4, $5);', [itid, group_id, sl_id, name, count]);
}
catch (error) {
console.error(error);
}
}
// 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
function generate_sl_id() {
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var output = "";
for(let i = 0; i < 8; i++) {
output += possible.charAt(Math.floor(Math.random() * possible.length));
}
return output;
}
//group_id generieren
function generate_group_id() {
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var output = "";
for(let i = 0; i < 8; i++) {
output += possible.charAt(Math.floor(Math.random() * possible.length));
}
return output;
}
//item_id generieren
function generate_item_id() {
var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
var output = "";
for(let i = 0; i < 8; i++) {
output += possible.charAt(Math.floor(Math.random() * possible.length));
}
return output;
}
function items_in_groups(groups, items, sl_id) {
let result = {
sl_id: sl_id,
groups: []
};
for(let item of groups) {
result.groups.push({
group_id: item.group_id,
name: item.name,
color: item.color,
content: items.filter(function(obj) {return obj.group_id == item.group_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, verifyInvite, createInvite, renameShoppinglist
}