diff --git a/web_server/blueprints/authentication.py b/web_server/blueprints/authentication.py index 0a4a853..d7c5a83 100644 --- a/web_server/blueprints/authentication.py +++ b/web_server/blueprints/authentication.py @@ -78,13 +78,15 @@ def signup(): # Create new user once input is validated cursor.execute( """INSERT INTO users - (username, password, email, num_followers, bio) - VALUES (?, ?, ?, ?, ?)""", + (username, password, email, num_followers, stream_key, is_partnered, bio) + VALUES (?, ?, ?, ?, ?, ?, ?)""", ( username, generate_password_hash(password), email, 0, + '1', + 0, "This user does not have a Bio." ) ) diff --git a/web_server/blueprints/streams.py b/web_server/blueprints/streams.py index ea49344..6d6af97 100644 --- a/web_server/blueprints/streams.py +++ b/web_server/blueprints/streams.py @@ -1,7 +1,7 @@ -from flask import Blueprint, session -from utils.stream_utils import streamer_data, streamer_id, streamer_live_status, streamer_most_recent_stream, streamer_stream, followed_live_streams +from flask import Blueprint, session, jsonify +from utils.stream_utils import streamer_live_status, streamer_most_recent_stream, user_stream, followed_live_streams from utils.user_utils import get_user_id -from database.database import Database +from database.database import Database stream_bp = Blueprint("stream", __name__) @@ -24,7 +24,9 @@ def get_sample_streams() -> list[dict]: streams = cursor.execute("""SELECT * FROM streams ORDER BY num_viewers DESC LIMIT 25; """).fetchall() - return streams + return jsonify({ + "streams": streams + }) @stream_bp.route('/get_recommended_streams') @@ -60,7 +62,7 @@ def get_categories() -> list[dict]: """ Returns a list of (sample) categories being watched right now """ - + db = Database() cursor = db.create_connection() @@ -70,8 +72,7 @@ def get_categories() -> list[dict]: GROUP BY category_name ORDER BY SUM(num_viewers) DESC LIMIT 25; """).fetchall() - return categories - + return jsonify({'categories': categories}) @stream_bp.route('/get_followed_categories') @@ -91,11 +92,8 @@ def get_streamer_data(streamer_username): """ Returns a given streamer's data """ - streamers_id = streamer_id(streamer_username) - if not streamers_id: - return #whatever - streamers_data = streamer_data(streamers_id) - return streamers_data + return + @stream_bp.route('/streamer//status') def get_streamer_status(streamer_username): @@ -105,7 +103,7 @@ def get_streamer_status(streamer_username): return {"status": "live", "streamId": 1} streamers_id = streamer_id(streamer_username) if not streamers_id: - return #whatever + return # whatever streamer_status = streamer_live_status(streamers_id) stream_id = streamer_most_recent_stream(streamers_id) return {"live": streamer_status, "streamerId": streamers_id, "streamId": stream_id} @@ -116,28 +114,24 @@ def get_stream(streamer_username): """ Returns a streamer's most recent stream data """ - streamers_id = streamer_id(streamer_username) - if not streamers_id: - return #whatever - most_recent_stream = streamer_most_recent_stream(streamers_id) - if most_recent_stream: - return most_recent_stream - - return #Whatever + return # Whatever + @stream_bp.route('/get_stream_data//', methods=['GET']) -def get_specific_stream(streamer_username,stream_id): +def get_specific_stream(streamer_username, stream_id): """ Returns a streamer's stream data given stream_id """ - stream = streamer_stream(streamer_username, stream_id) + stream = user_stream(streamer_username, stream_id) if stream: return stream - - return #whatever -#@login_required + return # whatever + +# @login_required # need to add in a lock to this route for only logged in users since we will be taking from the session + + @stream_bp.route('/get_followed_streams', methods=['GET']) def get_followed_streamers(): """ @@ -147,7 +141,7 @@ def get_followed_streamers(): user_id = get_user_id(username) live_following_streams = followed_live_streams(user_id) if not followed_live_streams: - return #whatever + return # whatever return live_following_streams diff --git a/web_server/database/app.db b/web_server/database/app.db index ce66019..c452c93 100644 Binary files a/web_server/database/app.db and b/web_server/database/app.db differ diff --git a/web_server/database/streaming.sql b/web_server/database/streaming.sql index 3fb9a52..e675990 100644 --- a/web_server/database/streaming.sql +++ b/web_server/database/streaming.sql @@ -38,15 +38,14 @@ CREATE TABLE categories DROP TABLE IF EXISTS streams; CREATE TABLE streams ( + stream_id INTEGER PRIMARY KEY AUTOINCREMENT, user_id INTEGER NOT NULL, - stream_id INTEGER NOT NULL, title TEXT NOT NULL, start_time DATETIME NOT NULL, num_viewers INTEGER NOT NULL DEFAULT 0, isLive BOOLEAN NOT NULL DEFAULT 0, vod_id INTEGER, category_id NOT NULL, - PRIMARY KEY (user_id, stream_id), FOREIGN KEY (category_id) REFERENCES categories(category_id) ON DELETE CASCADE, FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE ); \ No newline at end of file diff --git a/web_server/database/testing_data.sql b/web_server/database/testing_data.sql index 4b617e5..42cffe7 100644 --- a/web_server/database/testing_data.sql +++ b/web_server/database/testing_data.sql @@ -7,36 +7,28 @@ INSERT INTO categories (category_name) VALUES ('Sports'); -- Sample data for users -INSERT INTO users (username, password, email, num_followers, bio) VALUES -('GamerDude', 'password123', 'gamerdude@example.com', 500, 'Streaming my gaming adventures!'), -('MusicLover', 'music4life', 'musiclover@example.com', 1200, 'I share my favorite tunes.'), -('ArtFan', 'artistic123', 'artfan@example.com', 300, 'Exploring the world of art.'), -('EduGuru', 'learn123', 'eduguru@example.com', 800, 'Teaching everything I know.'), -('SportsStar', 'sports123', 'sportsstar@example.com', 2000, 'Join me for live sports updates!'); - --- Sample data for streamers -INSERT INTO streamers (user_id, streamer_id, since, stream_key, isPartnered) VALUES -(1, 101, '2023-01-01', '1234', 1), -(2, 102, '2022-05-15', '2345', 0), -(3, 103, '2023-03-20', '3456', 0), -(4, 104, '2021-11-05', '4567', 1), -(5, 105, '2020-07-18', '5678', 1); +INSERT INTO users (username, password, email, num_followers, stream_key, is_partnered, bio) VALUES +('GamerDude', 'password123', 'gamerdude@example.com', 500, '1', 0, 'Streaming my gaming adventures!'), +('MusicLover', 'music4life', 'musiclover@example.com', 1200, '1', 0, 'I share my favorite tunes.'), +('ArtFan', 'artistic123', 'artfan@example.com', 300, '1', 0, 'Exploring the world of art.'), +('EduGuru', 'learn123', 'eduguru@example.com', 800, '1', 0, 'Teaching everything I know.'), +('SportsStar', 'sports123', 'sportsstar@example.com', 2000, '1', 0, 'Join me for live sports updates!'); -- Sample data for streams -INSERT INTO streams (streamer_id, stream_id, title, start_time, num_viewers, isLive, vod_id, category_id) VALUES -(101, 1001, 'Epic Gaming Session', '2025-01-25 18:00:00', 150, 1, NULL, 1), -(102, 1002, 'Live Music Jam', '2025-01-25 20:00:00', 350, 1, NULL, 2), -(103, 1003, 'Sketching Live', '2025-01-24 15:00:00', 80, 0, 201, 3), -(104, 1004, 'Math Made Easy', '2025-01-23 10:00:00', 400, 0, 202, 4), -(105, 1005, 'Sports Highlights', '2025-01-25 12:00:00', 500, 1, NULL, 5); +INSERT INTO streams (user_id, title, start_time, num_viewers, isLive, vod_id, category_id) VALUES +(1, 'Epic Gaming Session', '2025-01-25 18:00:00', 150, 1, NULL, 1), +(2, 'Live Music Jam', '2025-01-25 20:00:00', 350, 1, NULL, 2), +(3, 'Sketching Live', '2025-01-24 15:00:00', 80, 0, 201, 3), +(4, 'Math Made Easy', '2025-01-23 10:00:00', 400, 0, 202, 4), +(5, 'Sports Highlights', '2025-01-25 12:00:00', 500, 1, NULL, 5); -- Sample data for follows -INSERT INTO follows (user_id, streamer_id, since) VALUES -(1, 102, '2024-12-01'), -(2, 101, '2024-11-15'), -(3, 103, '2024-10-20'), -(4, 104, '2024-09-12'), -(5, 105, '2024-08-30'); +INSERT INTO follows (user_id, followed_id, since) VALUES +(1, 2, '2024-12-01'), +(2, 3, '2024-11-15'), +(3, 4, '2024-10-20'), +(4, 5, '2024-09-12'), +(5, 1, '2024-08-30'); -- Sample data for user_preferences INSERT INTO user_preferences (user_id, category_id, favourability) VALUES @@ -47,9 +39,16 @@ INSERT INTO user_preferences (user_id, category_id, favourability) VALUES (5, 5, 10); -- Sample data for subscribes -INSERT INTO subscribes (user_id, streamer_id, since, expires) VALUES +INSERT INTO subscribes (user_id, subscribed_id, since, expires) VALUES (1, 101, '2024-12-01', '2025-01-01'), (2, 102, '2024-11-15', '2025-02-15'), (3, 103, '2024-10-20', '2025-01-20'), (4, 104, '2024-09-12', '2025-01-12'), (5, 105, '2024-08-30', '2025-02-28'); + +SELECT * FROM users; +SELECT * FROM streams; +SELECT * FROM follows; +SELECT * FROM user_preferences; +SELECT * FROM subscribes; +SELECT * FROM categories; diff --git a/web_server/database/users.sql b/web_server/database/users.sql index 613aa10..111edc1 100644 --- a/web_server/database/users.sql +++ b/web_server/database/users.sql @@ -22,7 +22,7 @@ CREATE TABLE follows user_id INTEGER NOT NULL, followed_id INTEGER NOT NULL, since DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - PRIMARY KEY (user_id, streamer_id), + PRIMARY KEY (user_id, followed_id), FOREIGN KEY (user_id) REFERENCES users(user_id) ON DELETE CASCADE, FOREIGN KEY (followed_id) REFERENCES users(user_id) ON DELETE CASCADE ); @@ -45,7 +45,7 @@ CREATE TABLE subscribes subscribed_id INTEGER NOT NULL, since DATETIME NOT NULL, expires DATETIME NOT NULL, - PRIMARY KEY (user_id,streamer_id), + PRIMARY KEY (user_id), FOREIGN KEY(user_id) REFERENCES users(user_id) ON DELETE CASCADE, FOREIGN KEY(subscribed_id) REFERENCES users(user_id) ON DELETE CASCADE ); diff --git a/web_server/utils/stream_utils.py b/web_server/utils/stream_utils.py index a432b58..d10005b 100644 --- a/web_server/utils/stream_utils.py +++ b/web_server/utils/stream_utils.py @@ -2,7 +2,7 @@ from database.database import Database from typing import Optional -def user_live_status(user_id: int) -> bool: +def streamer_live_status(user_id: int) -> bool: """ Returns whether the given streamer is live """ @@ -27,7 +27,7 @@ def followed_live_streams(user_id: int): return live_streams -def user_most_recent_stream(user_id: int): +def streamer_most_recent_stream(user_id: int): """ Returns data of the most recent stream by a streamer """