diff --git a/app.py b/app.py index b144719..d9e5932 100644 --- a/app.py +++ b/app.py @@ -63,6 +63,19 @@ def load_user(user_id): def inject_user(): return dict(user=current_user) +@app.context_processor +def inject_notifications(): + if current_user.is_authenticated: + habit_lists = current_user.get_unaccepted_habitLists() + lists = [] + for habit_list in habit_lists: + # Check if the user is the first user in the list + if habit_list.get_users()[0].id != current_user.id: + lists.append(habit_list) + + return dict(notifications=lists) + return dict(notifications=[]) + @app.route('/login') @anonymous_required @@ -849,40 +862,40 @@ def user_leave(): @app.route('/accept-list', methods=['POST']) @login_required def accept_list(): - list_id = request.form.get('list_id') + list_id = request.json.get('list_id') habit_list = HabitList.get(int(list_id)) users = habit_list.get_users() # Check if user is part of the list found = False for user in users: - if user.id == habit_list.id: + if user.id == current_user.id: found = True break if not found: - return redirect(url_for("index")) + return {} - current_user.accept_List(list_id) + current_user.accept_List(habit_list.id) return {} @app.route('/deny-list', methods=['POST']) @login_required def deny_list(): - list_id = request.form.get('list_id') + list_id = request.json.get('list_id') habit_list = HabitList.get(int(list_id)) users = habit_list.get_users() # Check if user is part of the list found = False for user in users: - if user.id == habit_list.id: + if user.id == current_user.id: found = True break if not found: - return redirect(url_for("index")) + return {} habit_list.remove_user(current_user.id) return {} diff --git a/db/SQLiteClient.py b/db/SQLiteClient.py index 768342d..9dc4db3 100644 --- a/db/SQLiteClient.py +++ b/db/SQLiteClient.py @@ -272,8 +272,8 @@ def create_habitList(user_id: int, name: str, description: str): conn = con3() cursor = conn.cursor() cursor.execute(query) - query2 = (f"INSERT INTO habit_users (user_id, list_id, created_at, updated_at)" - f" VALUES ('{user_id}', '{cursor.lastrowid}', '{now}', '{now}');") + query2 = (f"INSERT INTO habit_users (user_id, list_id, created_at, updated_at, accepted)" + f" VALUES ('{user_id}', '{cursor.lastrowid}', '{now}', '{now}', 1);") cursor.execute(query2) conn.commit() conn.close() @@ -291,7 +291,7 @@ def get_habitList(id: int): def get_habitLists(user_id: int): - query = (f"SELECT habit_lists.* FROM habit_lists JOIN habit_users ON habit_lists.id = habit_users.list_id " + query = (f"SELECT habit_lists.*, habit_users.user_id, habit_users.accepted FROM habit_lists JOIN habit_users ON habit_lists.id = habit_users.list_id " f"WHERE habit_users.user_id = {user_id};") conn = con3() cursor = conn.cursor() @@ -301,6 +301,17 @@ def get_habitLists(user_id: int): return habit_lists +def get_unaccepted_habitLists(user_id: int): + query = (f"SELECT habit_lists.* FROM habit_lists JOIN habit_users ON habit_lists.id = habit_users.list_id " + f"WHERE habit_users.user_id = {user_id} AND habit_users.accepted = false;") + conn = con3() + cursor = conn.cursor() + cursor.execute(query) + habit_lists = cursor.fetchall() + conn.close() + return habit_lists + + def get_users(list_id: int): query = (f"SELECT users.* FROM users JOIN habit_users ON users.id = habit_users.user_id WHERE " f"habit_users.list_id = {list_id};") @@ -323,7 +334,7 @@ def add_user(list_id: int, user_id: int): conn.close() def accept_List(list_id: int, user_id: int): - query = (f"UPDATE habit_users SET accepted = true WHERE {user_id} = habit_users.user_id AND {list_id} = habit_users.list_id;") + query = (f"UPDATE habit_users SET accepted = 1 WHERE habit_users.user_id = {user_id} AND habit_users.list_id = {list_id};") conn = con3() cursor = conn.cursor() cursor.execute(query) diff --git a/models/User.py b/models/User.py index 8df5cfb..c1a50cd 100644 --- a/models/User.py +++ b/models/User.py @@ -2,7 +2,7 @@ from datetime import datetime from flask_login import UserMixin from db.SQLiteClient import (create_user, get_user, get_user_by_email, update_user, delete_user, - get_habitLists, get_heatmap_value, accept_List) + get_habitLists, get_heatmap_value, accept_List, get_unaccepted_habitLists) class User(UserMixin): @@ -53,6 +53,21 @@ class User(UserMixin): raw_habitLists = get_habitLists(self.id) habitLists = [] + for habitList in raw_habitLists: + user_id = habitList[5] + accepted = habitList[6] + habitList = HabitList(habitList[0], habitList[1], habitList[2]) + if accepted == 1 or habitList.get_users()[0].id == user_id: + habitLists.append(habitList) + + return habitLists + + + def get_unaccepted_habitLists(self) -> list: + from models.HabitList import HabitList + + raw_habitLists = get_unaccepted_habitLists(self.id) + habitLists = [] for habitList in raw_habitLists: habitList = HabitList(habitList[0], habitList[1], habitList[2]) habitLists.append(habitList) @@ -78,4 +93,4 @@ class User(UserMixin): return heatmap, day def accept_List(self, HabitList_id): - accept_List(self.id, HabitList_id) + accept_List(HabitList_id, self.id) diff --git a/templates/layouts/main.html b/templates/layouts/main.html index da09360..905f4ad 100644 --- a/templates/layouts/main.html +++ b/templates/layouts/main.html @@ -2,15 +2,16 @@ - + {{ title }} - HabitTracker - - - - + + + + @@ -18,7 +19,9 @@ - + @@ -31,7 +34,8 @@