From 0b9fa8d7c31e38ea0dae66500784a3e3b8bb4b16 Mon Sep 17 00:00:00 2001 From: mikiyas-stp Date: Sat, 27 Sep 2025 14:56:29 +0100 Subject: [PATCH 1/5] version of psycopg2 changed --- backend/requirements.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/backend/requirements.txt b/backend/requirements.txt index e03836c..5e11b05 100644 --- a/backend/requirements.txt +++ b/backend/requirements.txt @@ -11,7 +11,7 @@ idna==3.10 itsdangerous==2.2.0 Jinja2==3.1.5 MarkupSafe==3.0.2 -psycopg2==2.9.10 +psycopg2-binary==2.9.10 pycparser==2.22 PyJWT==2.10.1 python-dotenv==1.0.1 From 7f952beaae05ad5c6694b9f756e3baeb139d0da6 Mon Sep 17 00:00:00 2001 From: Mikiyas-STP Date: Sat, 18 Oct 2025 16:35:53 +0100 Subject: [PATCH 2/5] =?UTF-8?q?Goal=20was=20to=20fix:=20Bug=20Report:=20Ca?= =?UTF-8?q?n't=20log=20in=20from=20profile=20page=20=F0=9F=94=97=20Clone?= =?UTF-8?q?=20Bug=20Report:=20Can't=20log=20in=20from=20profile=20page=20?= =?UTF-8?q?=F0=9F=94=97=20Steps=20to=20reproduce:?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Load site with sample data populated. Log in as sample / sosecret Click on a username (e.g. AS) in a bloom shown in the timeline Click logout Log in as sample / sosecret Expect to see: A logged in view of AS’s profile, with a “Logout” button in the top-right. Actually see: A 501 error page saying “Server does not support this operation.” :gear: bug DONE now --- front-end/views/profile.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/front-end/views/profile.mjs b/front-end/views/profile.mjs index dd2b92a..31139a9 100644 --- a/front-end/views/profile.mjs +++ b/front-end/views/profile.mjs @@ -39,8 +39,8 @@ function profileView(username) { createLogin ); document - .querySelector("[data-action='login']") - ?.addEventListener("click", handleLogin); + .querySelector("[data-form='login']") + ?.addEventListener("submit", handleLogin); const profileData = state.profiles.find((p) => p.username === username); if (profileData) { From ca53dc4c1999c99467eb7a7d702187bc001bab40 Mon Sep 17 00:00:00 2001 From: Mikiyas-STP Date: Sat, 18 Oct 2025 18:51:22 +0100 Subject: [PATCH 3/5] Bug Report: Extra long blooms? Blooms are meant to be limited to 280 characters! But AS has a bloom which is longer than that! Not fair! => This bug is fixed now --- backend/endpoints.py | 14 +++++++++++++- backend/populate.py | 3 +-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/backend/endpoints.py b/backend/endpoints.py index 0e177a0..1657625 100644 --- a/backend/endpoints.py +++ b/backend/endpoints.py @@ -157,8 +157,20 @@ def send_bloom(): return type_check_error user = get_current_user() + #Extract content safely + content = request.json.get("content", "") + # Limit content length + MAX_BLOOM_LENGTH = 280 + if len(content) > MAX_BLOOM_LENGTH: + return make_response( + { + "success": False, + "message": f"Bloom cannot exceed {MAX_BLOOM_LENGTH} characters", + }, + 400, + ) - blooms.add_bloom(sender=user, content=request.json["content"]) + blooms.add_bloom(sender=user, content=content) return jsonify( { diff --git a/backend/populate.py b/backend/populate.py index 414218b..8ca3293 100644 --- a/backend/populate.py +++ b/backend/populate.py @@ -64,8 +64,7 @@ def main(): writer_access_token = create_user("AS", "neverSt0pTalking") send_bloom( writer_access_token, - "In this essay I will convince you that my views are correct in ways you have never imagined. If it doesn't change your life, read it again. Marshmallows are magnificent. They have great squish, tasty good, and you can even toast them over a fire. Toast them just right until they have a tiny bit of crunch when you bite into them, and have just started melting in the middle.", - ) + "In this essay I will convince you that my views are correct in ways you have never imagined. Marshmallows are magnificent!" ) justsomeguy_access_token = create_user("JustSomeGuy", "mysterious") send_bloom(justsomeguy_access_token, "Hello.") From ab5a19463062773974a567f64e0df621a6edbcb1 Mon Sep 17 00:00:00 2001 From: Mikiyas-STP Date: Sat, 18 Oct 2025 19:04:13 +0100 Subject: [PATCH 4/5] =?UTF-8?q?swizbiz=20love=20regex=20debugging=20:=20fo?= =?UTF-8?q?r=20the=20bug=20report=20Bug=20Report:=20Hashtag=20link=20doesn?= =?UTF-8?q?'t=20work=20correctly,=20When=20loading=20the=20populated=20dat?= =?UTF-8?q?a,=20the=20user=20Swiz=E2=80=99s=20second=20bloom=20(which=20re?= =?UTF-8?q?ads=20=E2=80=9CLet=E2=80=99s=20get=20some=20#SwizBiz=20love!!?= =?UTF-8?q?=E2=80=9D)=20has=20weird=20hashtag=20links.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit If you click the word “#SwizBiz” it takes you to an empty page which doesn’t show any blooms. I would expect at least the bloom I clicked the link in to be shown, and also perhaps any others containing the hashtag. On the other hand, in their other bloom (“New album dropping at midnight! Pre-save now! #SwizBiz”), clicking on “#SwizBiz” does take you to exactly what I expect - a page showing blooms containing #SwizBiz including the one I clicked from. --- front-end/components/bloom.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/front-end/components/bloom.mjs b/front-end/components/bloom.mjs index 0b4166c..8a75cc3 100644 --- a/front-end/components/bloom.mjs +++ b/front-end/components/bloom.mjs @@ -37,7 +37,7 @@ const createBloom = (template, bloom) => { function _formatHashtags(text) { if (!text) return text; return text.replace( - /\B#[^#]+/g, + /(^|\s)(#[\w]+)/g, (match) => `${match}` ); } From 679d9a067536a6a762ed217b0174e254fbc9b0f9 Mon Sep 17 00:00:00 2001 From: Mikiyas-STP Date: Sat, 18 Oct 2025 19:30:19 +0100 Subject: [PATCH 5/5] fix for Bug Report: Hashtag slowing down my browser: added a condition for checking if the current hashtag is there we dont need to fetch its own data. makes sense --- front-end/views/hashtag.mjs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/front-end/views/hashtag.mjs b/front-end/views/hashtag.mjs index 7b7e996..3e51bad 100644 --- a/front-end/views/hashtag.mjs +++ b/front-end/views/hashtag.mjs @@ -15,6 +15,13 @@ import {createHeading} from "../components/heading.mjs"; // Hashtag view: show all tweets containing this tag function hashtagView(hashtag) { + //only fetch data from the server and avoid the flashing on slow network + if (state.currentHashtag !== hashtag) { + state.currentHashtag = hashtag; + state.hashtagBlooms = []; + apiService.getBloomsByHashtag(hashtag); + } + //this one if statement fixes the flashing behavior by checking if the hashtag selected is already running or not destroy(); apiService.getBloomsByHashtag(hashtag);