From 1036494b7d42e4fcd1bf70d2fee9238fb1bc27e6 Mon Sep 17 00:00:00 2001 From: JustIceO7 Date: Fri, 31 Jan 2025 03:52:25 +0000 Subject: [PATCH] UPDATE: Added recommended categories as well as streamer data BUGFIX: Fixed wrong datatypes --- web_server/blueprints/streams.py | 25 ++++++++++++------------ web_server/database/streaming.sql | 10 +--------- web_server/utils/recommendation_utils.py | 19 ++++++++++++++++-- web_server/utils/stream_utils.py | 13 +++++++++++- 4 files changed, 42 insertions(+), 25 deletions(-) diff --git a/web_server/blueprints/streams.py b/web_server/blueprints/streams.py index 0eff2a7..e41d556 100644 --- a/web_server/blueprints/streams.py +++ b/web_server/blueprints/streams.py @@ -5,7 +5,8 @@ from utils.stream_utils import ( user_stream, followed_live_streams, followed_streamers, - stream_tags + stream_tags, + streamer_data ) from utils.user_utils import get_user_id from blueprints.utils import login_required @@ -14,7 +15,8 @@ from utils.recommendation_utils import ( recommendations_based_on_category, user_recommendation_category, followed_categories_recommendations, - category_recommendations + category_recommendations, + user_category_recommendations ) from utils.utils import most_popular_category from database.database import Database @@ -70,16 +72,9 @@ def get_recommended_categories() -> list | list[dict]: Queries DB to get a list of recommended categories for the user """ - username = session.get('username') - user_id = get_user_id(username) - - db = Database() - categories = db.fetchall("""SELECT categories.category_id, categories.category_name, favourability - FROM categories, user_preferences - WHERE user_id = ? AND categories.category_id = user_preferences.category_id, - ORDER BY favourability DESC""", (user_id,)) - - return jsonify({'categories': categories}) + user_id = session.get("user_id") + categories = user_category_recommendations(user_id) + return categories @stream_bp.route('/get_streamer_data/') @@ -87,7 +82,11 @@ def get_streamer_data(streamer_username): """ Returns a given streamer's data """ - return + streamer_id = get_user_id(streamer_username) + if not streamer_id: + abort(404) + data = streamer_data(streamer_id) + return data @stream_bp.route('/streamer//status') diff --git a/web_server/database/streaming.sql b/web_server/database/streaming.sql index 006a371..33a17c5 100644 --- a/web_server/database/streaming.sql +++ b/web_server/database/streaming.sql @@ -48,12 +48,4 @@ CREATE TABLE streams category_id NOT NULL, FOREIGN KEY (category_id) REFERENCES categories(category_id) ON DELETE CASCADE, FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE -); - - -SELECT users.user_id, title, username, num_viewers, category_name - FROM streams - JOIN users ON users.user_id = streams.user_id - JOIN categories ON streams.category_id = categories.category_id - ORDER BY num_viewers DESC - LIMIT 25; \ No newline at end of file +); \ No newline at end of file diff --git a/web_server/utils/recommendation_utils.py b/web_server/utils/recommendation_utils.py index 298cd43..e3bddff 100644 --- a/web_server/utils/recommendation_utils.py +++ b/web_server/utils/recommendation_utils.py @@ -6,14 +6,14 @@ def user_recommendation_category(user_id: int) -> Optional[int]: Queries user_preferences database to find users favourite streaming category and returns the category """ with Database() as db: - data = db.fetchone(""" + category = db.fetchone(""" SELECT category_id FROM user_preferences WHERE user_id = ? ORDER BY favourability DESC LIMIT 1 """, (user_id,)) - return data + return category["category_id"] if category else None def followed_categories_recommendations(user_id : int) -> Optional[List[dict]]: """ @@ -77,4 +77,19 @@ def category_recommendations() -> Optional[List[dict]]: ORDER BY SUM(streams.num_viewers) DESC LIMIT 5; """) + return categories + +def user_category_recommendations(user_id: int) -> Optional[List[dict]]: + """ + Queries user_preferences database to find users top 5 favourite streaming category and returns the category + """ + with Database() as db: + categories = db.fetchall(""" + SELECT categories.category_id, categories.category_name + FROM categories + JOIN user_preferences ON categories.category_id = user_preferences.category_id + WHERE user_id = ? + ORDER BY favourability DESC + LIMIT 5 + """, (user_id,)) return categories \ No newline at end of file diff --git a/web_server/utils/stream_utils.py b/web_server/utils/stream_utils.py index 8085c16..f7822ba 100644 --- a/web_server/utils/stream_utils.py +++ b/web_server/utils/stream_utils.py @@ -45,7 +45,7 @@ def followed_streamers(user_id: int) -> Optional[List[dict]]: """, (user_id,)) return followed_streamers -def streamer_most_recent_stream(user_id: int) -> dict: +def streamer_most_recent_stream(user_id: int) -> Optional[dict]: """ Returns data of the most recent stream by a streamer """ @@ -57,6 +57,17 @@ def streamer_most_recent_stream(user_id: int) -> dict: """, (user_id, user_id)) return most_recent_stream +def streamer_data(streamer_id: int) -> Optional[dict]: + """ + Returns information about the streamer + """ + with Database() as db: + data = db.fetchone(""" + SELECT username, num_followering, isPartnered FROM users + WHERE user_id = ? + """, (streamer_id)) + return data + def user_stream(user_id: int, stream_id: int) -> dict: """ Returns data of a streamers selected stream