summaryrefslogtreecommitdiff
path: root/Biz/PodcastItLater/Web.py
diff options
context:
space:
mode:
authorBen Sima <ben@bsima.me>2025-11-16 03:22:28 -0500
committerBen Sima <ben@bsima.me>2025-11-16 03:22:28 -0500
commit4106020d713ea1d8ed815b1180d8df3ea60ae46e (patch)
treea9f16613e372f6ba167537b6516264748f4c39ed /Biz/PodcastItLater/Web.py
parenta2a4360e89603052e9f88d8405eaa386019b680f (diff)
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
Diffstat (limited to 'Biz/PodcastItLater/Web.py')
-rw-r--r--Biz/PodcastItLater/Web.py48
1 files changed, 48 insertions, 0 deletions
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(
+ '<div class="alert alert-warning">Please login first</div>',
+ status_code=200,
+ )
+
+ # Check if episode exists
+ episode = Core.Database.get_episode_by_id(episode_id)
+ if not episode:
+ return Response(
+ '<div class="alert alert-danger">Episode not found</div>',
+ status_code=404,
+ )
+
+ # Check if user already has this episode
+ if Core.Database.user_has_episode(user_id, episode_id):
+ return Response(
+ '<div class="alert alert-info">Already in your feed</div>',
+ 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(
+ '<div class="alert alert-success">'
+ '<i class="bi bi-check-circle me-2"></i>'
+ "Added to your feed! "
+ '<a href="/" class="alert-link">View your feed</a>'
+ "</div>",
+ status_code=200,
+ )
+
+
class BaseWebTest(Test.TestCase):
"""Base class for web tests with database setup."""