From 4106020d713ea1d8ed815b1180d8df3ea60ae46e Mon Sep 17 00:00:00 2001 From: Ben Sima Date: Sun, 16 Nov 2025 03:22:28 -0500 Subject: Add 'Add to feed' button on episode pages and fix typecheck.sh - Episode pages now show 'Add to feed' button for logged-in users who don't have the episode - Added POST /episode/{id}/add-to-feed endpoint - Tracks 'added' metric when user adds episode to their feed - Added Database.track_episode_metric() function for metrics tracking - Fixed typecheck.sh to use bild instead of broken repl.sh approach Tasks completed: t-gc9aud, t-gcbqDl --- Biz/PodcastItLater/Web.py | 48 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) (limited to 'Biz/PodcastItLater/Web.py') diff --git a/Biz/PodcastItLater/Web.py b/Biz/PodcastItLater/Web.py index 97ec439..7c85e0b 100644 --- a/Biz/PodcastItLater/Web.py +++ b/Biz/PodcastItLater/Web.py @@ -1454,8 +1454,13 @@ def episode_detail( # Check if current user is logged in user_id = request.session.get("user_id") user = None + user_has_episode = False if user_id: user = Core.Database.get_user_by_id(user_id) + user_has_episode = Core.Database.user_has_episode( + user_id, + episode_id, + ) return Episode.EpisodeDetailPage( episode=episode, @@ -1463,6 +1468,7 @@ def episode_detail( creator_email=creator_email, user=user, base_url=BASE_URL, + user_has_episode=user_has_episode, ) except (ValueError, KeyError) as e: @@ -1611,6 +1617,48 @@ app.post("/admin/episode/{episode_id}/toggle-public")( ) +@app.post("/episode/{episode_id}/add-to-feed") +def add_episode_to_feed(request: Request, episode_id: int) -> Response: + """Add an episode to the user's feed.""" + # Check if user is logged in + user_id = request.session.get("user_id") + if not user_id: + return Response( + '
Please login first
', + status_code=200, + ) + + # Check if episode exists + episode = Core.Database.get_episode_by_id(episode_id) + if not episode: + return Response( + '
Episode not found
', + status_code=404, + ) + + # Check if user already has this episode + if Core.Database.user_has_episode(user_id, episode_id): + return Response( + '
Already in your feed
', + status_code=200, + ) + + # Add episode to user's feed + Core.Database.add_episode_to_user(user_id, episode_id) + + # Track the "added" event + Core.Database.track_episode_metric(episode_id, "added", user_id) + + return Response( + '
' + '' + "Added to your feed! " + 'View your feed' + "
", + status_code=200, + ) + + class BaseWebTest(Test.TestCase): """Base class for web tests with database setup.""" -- cgit v1.2.3