From c0ddca85bab1753fe810c183cc807361043af378 Mon Sep 17 00:00:00 2001 From: ThisBirchWood Date: Thu, 6 Feb 2025 17:25:25 +0000 Subject: [PATCH] PATCH: Fixed a load of broken user routes --- web_server/blueprints/user.py | 18 ++++++++++----- web_server/database/app.db | Bin 94208 -> 94208 bytes web_server/database/testing_data.sql | 6 ++--- web_server/requirements.txt | 3 ++- web_server/utils/user_utils.py | 32 +++++++++++++-------------- 5 files changed, 33 insertions(+), 26 deletions(-) diff --git a/web_server/blueprints/user.py b/web_server/blueprints/user.py index 6508b57..1b3be85 100644 --- a/web_server/blueprints/user.py +++ b/web_server/blueprints/user.py @@ -52,23 +52,28 @@ def user_following(user_id: int, followed_id: int): @login_required @user_bp.route('/user/follow/') -def follow(username): +def follow_user(username): """ Follows a user """ user_id = session.get("user_id") following_id = get_user_id(username) - follow(user_id, following_id) + if follow(user_id, following_id): + return jsonify({"success": True, + "already_following": False}) + return jsonify({"success": True, + "already_following": True}) @login_required @user_bp.route('/user/unfollow/') -def user_unfollow(followed_username): +def unfollow_user(username): """ Unfollows a user """ user_id = session.get("user_id") - followed_id = get_user_id(followed_username) + followed_id = get_user_id(username) unfollow(user_id, followed_id) + return jsonify({"success": True}) @login_required @user_bp.route('/user/following') @@ -88,7 +93,10 @@ def get_login_status(): Returns whether the user is logged in or not """ username = session.get("username") - return jsonify({'status': username is not None, 'username': username}) + user_id = session.get("user_id") + return jsonify({'status': username is not None, + 'username': username, + 'user_id': user_id}) @user_bp.route('/user/forgot_password/', methods=['GET','POST']) def user_forgot_password(email): diff --git a/web_server/database/app.db b/web_server/database/app.db index df6d35b8a60a578cdf18adb95750ff3674d3f3b4..af0b7442295dfe9c8a1c16e17c4cfd7299bf47c3 100644 GIT binary patch delta 522 zcmYk3O=uHA6vyXvW@mSrt`jYG)kH}SMM_&tOqyb-#t$q)?YVer6G&+xb=%$8*rZCk zqvEk)!2u~Ycn~itcEJUqCxr@ChSTdbVxl3lxzwp*f{tc_sB+|in4)O2&Gk?!t z^QT<$d%VbV-oeNf?&ek=W5(A!wYF;>rxGzGium)k-qttTniAD2^e0_s6I4>^p9lh0 zh+_%Ui!uuW+BXzajZg^gUXnZg(1{bmk{>dVAWm7#cv*EGVA}nnWz=4Aof;QH@?!>$ z93D3d1+!$2#+yq(|A8viT8TI#!uIOQ2oPsnOnK|AlK=%j9)@~*mpXs~cpEW6$5f>3 zkgs_Az#Qw-H{0^611YqO5Zu|DZZv55%P~mcFw2m4O}=6_SIFB%E1#XR?ZuLqb2;9H zoBp!_&;UyE)mfM!i(zp?4)?($WtJMlC--QNN|u5!VH;@Btt%IaI3;d-zx5Y@heSnw zIs-%MWl^NYwZ#5ya_}5<=?Jwv-2YiqLm5beuDv0RL%^98xBio6$*W2Dg*(K2wf2Ar OEXsa&8U#E!53xUPl$Tln delta 370 zcmZp8z}oPDb%K--^H&B225}&U0;W$Bb&Qypziv#J&(9dUNuVR1!@$7G#Kg+jbn=9J z9R%k{z6qSOsena6iksh#f&V@KUH&utyZBe|Pv>vrFX2z(58$`kEU2KsuOh(B!pNw| z&T3>}WTI0*sScrvEi%Oy1nWTF$Zkw=5%@kS3cd126M=2L4lg`F!fUn|W4puj5kZ zyvb?LrpM~Z`jYuPGdE)kqZz}T$%+C++vgZC8Z)yrl{IHipDo6yvwf-!qcU%s3C8m2QFe^-o6Q*2*_Jsl8UO%wj$d>D diff --git a/web_server/database/testing_data.sql b/web_server/database/testing_data.sql index bd015ed..212b889 100644 --- a/web_server/database/testing_data.sql +++ b/web_server/database/testing_data.sql @@ -124,9 +124,7 @@ LIMIT 10; INSERT INTO follows (user_id, followed_id, since) VALUES (7, 1, '2024-08-30'), (7, 2, '2024-08-30'), -(7, 3, '2024-08-30'), -(7, 4, '2024-08-30'), -(7, 5, '2024-08-30'); +(7, 3, '2024-08-30'); INSERT INTO followed_categories (user_id, category_id) VALUES (7, 1), @@ -134,5 +132,5 @@ INSERT INTO followed_categories (user_id, category_id) VALUES (7, 3); INSERT INTO subscribes (user_id, subscribed_id, since, expires) VALUES -(7, 1, '2024-08-30', '2025-02-28'), +(7, 1, '2024-08-30', '2025-02-28 12:00:00'), (7, 2, '2024-08-30', '2025-02-15'); \ No newline at end of file diff --git a/web_server/requirements.txt b/web_server/requirements.txt index 5cdc2ce..349268f 100644 --- a/web_server/requirements.txt +++ b/web_server/requirements.txt @@ -26,4 +26,5 @@ gevent>=22.10.2 gevent-websocket flask-oauthlib==0.9.6 celery==5.2.3 -redis==5.2.1 \ No newline at end of file +redis==5.2.1 +python-dateutil \ No newline at end of file diff --git a/web_server/utils/user_utils.py b/web_server/utils/user_utils.py index fffbefe..edc1781 100644 --- a/web_server/utils/user_utils.py +++ b/web_server/utils/user_utils.py @@ -4,6 +4,7 @@ from datetime import datetime from itsdangerous import URLSafeTimedSerializer from os import getenv from werkzeug.security import generate_password_hash, check_password_hash +from dateutil import parser from dotenv import load_dotenv load_dotenv() @@ -91,29 +92,28 @@ def follow(user_id: int, following_id: int): """ Follows following_id user from user_id user """ - with Database() as db: - data = db.execute(""" - SELECT * FROM follows - WHERE user_id = ? - AND followed_id = ? - """, (user_id, following_id)) - - if not data: + if not is_following(user_id, following_id): + with Database() as db: db.execute(""" INSERT INTO follows (user_id, followed_id) - VALUES(?,?) + VALUES(?,?); """, (user_id, following_id)) + return True + return False def unfollow(user_id: int, followed_id: int): """ Unfollows follow_id user from user_id user """ - with Database() as db: - db.execute(""" - DELETE FROM follows - WHERE user_id = ? - AND followed_id = ? - """, (user_id, followed_id)) + if is_following(user_id, followed_id): + with Database() as db: + db.execute(""" + DELETE FROM follows + WHERE user_id = ? + AND followed_id = ? + """, (user_id, followed_id)) + return True + return False def subscription_expiration(user_id: int, subscribed_id: int) -> int: @@ -131,7 +131,7 @@ def subscription_expiration(user_id: int, subscribed_id: int) -> int: if data: expiration_date = data["expires"] - remaining_time = (expiration_date - datetime.now()).seconds + remaining_time = (parser.parse(expiration_date) - datetime.now()).seconds return remaining_time return 0