diff --git a/__pycache__/shop.cpython-38.pyc b/__pycache__/shop.cpython-38.pyc new file mode 100644 index 0000000..af39d79 Binary files /dev/null and b/__pycache__/shop.cpython-38.pyc differ diff --git a/config b/config index 2956e3e..5e866d3 100644 --- a/config +++ b/config @@ -1,4 +1,5 @@ [mysql] +Host = localhost Username = SQLUsernam Password = SQLPassword Database = DBNAME \ No newline at end of file diff --git a/shop.py b/shop.py index e2a6402..a4714b8 100644 --- a/shop.py +++ b/shop.py @@ -14,7 +14,7 @@ except Exception as E: def dbConnect(): mydb = mysql.connector.connect( - host="localhost", + host=config["mysql"]["Host"], user=config["mysql"]["Username"], passwd=config["mysql"]["Password"], database=config["mysql"]["Database"] @@ -28,9 +28,12 @@ def doesTableExist(): mycursor.execute('''SHOW TABLES''') tables = mycursor.fetchall() if len(tables) == 0: - mycursor.execute('''CREATE TABLE SHOPLIST (id INT AUTO_INCREMENT PRIMARY KEY, item VARCHAR(255), gotten BOOLEAN, user_id INT, FOREIGN KEY (`user_id`) REFERENCES `USERS`(`id`) - ON DELETE CASCADE)''') mycursor.execute('''CREATE TABLE USERS (id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(255), password VARCHAR(255), admin BOOLEAN)''') + mycursor.execute('''CREATE TABLE LISTS (id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(255))''') + mycursor.execute('''CREATE TABLE SHOPLIST (id INT AUTO_INCREMENT PRIMARY KEY, item VARCHAR(255), gotten BOOLEAN, user_id INT, list_id INT, FOREIGN KEY (`list_id`) REFERENCES `LISTS`(`id`), FOREIGN KEY (`user_id`) REFERENCES `USERS`(`id`) + ON DELETE CASCADE)''') + mycursor.execute('''CREATE TABLE USER_META (user_id INT, list_id INT, FOREIGN KEY (`list_id`) REFERENCES `LISTS`(`id`), FOREIGN KEY (`user_id`) REFERENCES `USERS`(`id`) + ON DELETE CASCADE)''') mydb.close() def runQuery(query, data=None): @@ -49,29 +52,29 @@ def runQuery(query, data=None): return ret def readFromDB(): - # query = '''select * from SHOPLIST''' - query = '''select SHOPLIST.id, SHOPLIST.item, SHOPLIST.gotten, USERS.username from SHOPLIST inner join USERS on SHOPLIST.user_id = USERS.id''' + # By default load all shopping lists the user is a part of (Most users will only have one so this this fine) + query = '''select SHOPLIST.id, SHOPLIST.item, SHOPLIST.gotten, USERS.username, SHOPLIST.list_id from SHOPLIST inner join USERS on SHOPLIST.user_id = USERS.id inner join USER_META on SHOPLIST.list_id = USER_META.list_id''' return runQuery(query) def insertToDB(data): - query = f"INSERT INTO SHOPLIST (item, gotten, user_id) VALUES (%s, 0, %s)" - data = (data['item'], data['name']) + query = "INSERT INTO SHOPLIST (item, gotten, user_id, list_id) VALUES (%s, 0, %s, %s)" + data = (data['item'], data['name'], data["list_id"]) # print(query) runQuery(query, data) def deleteRow(rowID): - query = f"DELETE FROM SHOPLIST WHERE id = %s" + query = "DELETE FROM SHOPLIST WHERE id = %s" data = (rowID, ) runQuery(query, data) def getItem(rowID): - query = f"UPDATE SHOPLIST set gotten = 1 where id = %s" + query = "UPDATE SHOPLIST set gotten = 1 where id = %s" data = (rowID, ) runQuery(query, data) def unGetItem(rowID): - query = f"UPDATE SHOPLIST set gotten = 0 where id = %s" + query = "UPDATE SHOPLIST set gotten = 0 where id = %s" data = (rowID, ) runQuery(query, data) @@ -80,22 +83,40 @@ def get_users(username=None): #return all users query = "select username, admin, id from USERS" return runQuery(query) - query = f"select username, admin from USERS where username like %s" + query = "select username, admin from USERS where username like %s" data = (username, ) return runQuery(query, data) def add_user(userData): username = userData["username"] password = userData["password"] - query = f"insert into USERS (username, password, admin) values (%s, md5(%s), False)" + query = "insert into USERS (username, password, admin) values (%s, md5(%s), False)" data = (username, password) runQuery(query, data) def update_pass(user_id, newpass): - query = f"update USERS set password=md5(%s) where id=%s" + query = "update USERS set password=md5(%s) where id=%s" data = (newpass, user_id) runQuery(query, data) +def get_items(user_id, list_id=None): + if list_id != None: + query = "select SHOPLIST.id, SHOPLIST.item, SHOPLIST.gotten, USERS.username from SHOPLIST inner join USERS on SHOPLIST.user_id = USERS.id inner join USER_META on SHOPLIST.list_id = USER_META.list_id where USER_META.user_id = %s and SHOPLIST.list_id = %s" + data = (user_id, list_id) + return runQuery(query, data) + query = "select SHOPLIST.id, SHOPLIST.item, SHOPLIST.gotten, USERS.username from SHOPLIST inner join USERS on SHOPLIST.user_id = USERS.id inner join USER_META on SHOPLIST.list_id = USER_META.list_id where USER_META.user_id = %s" + data = (user_id,) + return runQuery(query, data) + +def get_list_ids(user_id): + ret = {} + query = "select USER_META.list_id, LISTS.name from USER_META inner join LISTS on LISTS.id = USER_META.list_id where USER_META.user_id = %s" + data = (user_id,) + res = runQuery(query, data) + for lid, name in res: + ret[lid] = name + return ret + app = Flask(__name__) app.config["DEBUG"] = True app.secret_key = b'*$#@U9423jr92jioJKL_)_;dasfj()12' @@ -105,9 +126,13 @@ def index(): if session.get('id') is None: data = {"title":"Login"} return render_template("auth.html", data=data) + + if session.get("active_id") == "0": + res = get_items(session["id"]) + else: + res = get_items(session["id"], session["active_id"]) + data = {"title": "Shopping List", "results": res, "session": session, "list_ids": session["list_ids"]} - query = readFromDB() - data = {"title": "Shopping List", "results": query, "username": session["username"]} for device in MOBILES: if device in request.user_agent.platform: return render_template('mobile.html', data=data) @@ -119,7 +144,7 @@ def handle_data(): for x in request.form: if request.form[x] == '': return redirect(url_for('index')) - insertToDB({"item": request.form["item"], "name": session["id"]}) + insertToDB({"item": request.form["item"], "name": session["id"], "list_id": request.form["add2list"]}) if "rem" in request.form: deleteRow(request.form["rem"]) @@ -132,17 +157,18 @@ def handle_data(): if "loginform" in request.form: query = "select id, username, admin from USERS where username = %s and password = md5(%s)" data = (request.form["username"].lower(), request.form["password"]) - res = runQuery(query, data) if len(res) != 0: + list_ids = get_list_ids(res[0][0]) session["id"] = res[0][0] session["username"] = res[0][1] session["isAdmin"] = res[0][2] + session["list_ids"] = list_ids + session["active_id"] = "0" if "newuser" in request.form: #first check if the user exists usrCheck = get_users(request.form["username"]) - print(usrCheck) if len(usrCheck) != 0: return "Username Exists" userData = {"username": request.form["username"], "password": request.form["password"]} @@ -157,6 +183,10 @@ def handle_data(): if "logout" in request.form: session.clear() + + if "list" in request.form: + session["active_id"] = request.form['list'] + return redirect(url_for('index')) @app.route("/admin") diff --git a/static/css/main.css b/static/css/main.css index f9bad10..33de747 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -1,5 +1,5 @@ * { - color: azure; + color: azure; } aside { width: 20%; diff --git a/templates/addForm.html b/templates/addForm.html index 2440c1c..0c5ad79 100644 --- a/templates/addForm.html +++ b/templates/addForm.html @@ -2,6 +2,11 @@