From 25235c5c260f97ec31559c2c788db275c64ae99b Mon Sep 17 00:00:00 2001 From: Chris-1010 <122332721@umail.ucc.ie> Date: Tue, 28 Jan 2025 15:14:33 +0000 Subject: [PATCH] PATCH: Fix to Database Changes --- web_server/blueprints/authentication.py | 6 ++- web_server/blueprints/streams.py | 48 ++++++++++----------- web_server/database/app.db | Bin 73728 -> 73728 bytes web_server/database/streaming.sql | 3 +- web_server/database/testing_data.sql | 53 ++++++++++++------------ web_server/database/users.sql | 4 +- web_server/utils/stream_utils.py | 4 +- 7 files changed, 56 insertions(+), 62 deletions(-) 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 ce6601963300a3c465ebf47a9daaf5f8bdd26364..c452c93920df24435ea88d3a836f4b524ccb2e58 100644 GIT binary patch delta 1807 zcmYjRU2GIp6ux)vot>TiyITk}Z9{t3K4_EfvNPKTN}@ot^k1t*L>|QH?reA3-JNA- zwonNvQ$l>1 z&N<(?JEyPF)7R+vj+O>OXbVUJgd&8WTIwle8z?t(BT09lq;L|kOQ|D?`{a-KDRGrn z$h>eeay4=+c2}0fee!qATy9C)z{*cw^#T8XZDMmX;3jQTMq>>*L$7Vbn|diDE@_9Njv)afo`EXs+#y=sqj8Zrg^> z)*NlBs{3KSNXz?@4Gcr0t4m9t$Il#gpO;!YI`Hd~*B9^e&czenY_bjacy9?^-n;QH zyiX!Y@6E(P?^L8W66O;HP>VuNX)enP7?s(P+y)}$NCh-uV$ zP3L9P;#Ff#=V2soHcFbK+nHf1qmCT~fPH$P)EsPD&8n_hb%4}M&1pEU;VlG!gewPi ztynSY(_Ej^t$8OIv>#N`HlDjSNvc<{ybWt zJAre^z>q;EXLY#wetToE>4lAyUas_oDHG^A$@vXI4fqxOI3DoJN3_~TLLXPxYrG;T zK$~3f1c zSs<;rY3r6PrZCCiB3#C4Se9;!@1*(VR|85{5PQgeXLs2uTLFwu*^n#})E07?pagZo zm4!@bBSHw;3YRV_5Y!qBBx48-d-dB9*+s@#)|&@QkUCQ>YCL>Qqro8O%+ zo1tN$5BMXr0e+Y>G;%)&+gZS?;$rph7k-fnwT)9=m z{sD%6Wk0Z0Fn`6KlwcwZC1R3438qw%`~ff_QOWNc3xX^{yE2Y#H2EL}U2hd!L&A`tT%fP>m!=G;huQ~@K zdpfrkyE*4I)+ucNn6I&VGR1N(;LqPU@ggI4Q)#0rySSnvW2@=pVwQ0BlA_ea+|;7U z0lcDLkAV~DHU@^Kv_?gCacODBR^^h!q@2{W{G6Qp@?t2(HkqH-k^^o_0B;t86UZYv zc{P{WWL`dDn0@QHOqg{Wl_q~+*5PI6I1IHyw^0HpA|nbhra0aZ$`EW6YZROOoJ)a` zYcdCSse*T-D4V#tC}U=3UP@|3azOA$)}Rdtc@b<;-aFAt-0W!1GyN4IXB;6 zD_~@4tZEdVT+gJ$$T4{l)Ah;g_`^1{1pJX-lpruEfrEwrDgV>Wj32)6Z%SZMfJ!J# g3}EMF1o{k=d<1})f3u*%8>or|pw 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 """