From 081f0759b37452bb1319c4f5f88a1d451a5177a9 Mon Sep 17 00:00:00 2001 From: Ben Sima Date: Sun, 16 Nov 2025 03:30:44 -0500 Subject: Add metrics tracking endpoint and JavaScript for play events - Added POST /episode/{id}/track endpoint to track play/download events - Added JavaScript to audio player to track first play event - JavaScript sends fetch request to tracking endpoint on play - Tracks user_id if logged in, otherwise anonymous - Added main() function to Episode.py for test compatibility Tasks completed: t-gcdFSb, t-gcfTnG --- Biz/PodcastItLater/Web.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'Biz/PodcastItLater/Web.py') diff --git a/Biz/PodcastItLater/Web.py b/Biz/PodcastItLater/Web.py index 7c85e0b..a706eb5 100644 --- a/Biz/PodcastItLater/Web.py +++ b/Biz/PodcastItLater/Web.py @@ -1659,6 +1659,30 @@ def add_episode_to_feed(request: Request, episode_id: int) -> Response: ) +@app.post("/episode/{episode_id}/track") +def track_episode( + request: Request, + episode_id: int, + data: FormData, +) -> Response: + """Track an episode metric event (play, download).""" + # Get event type from form data + event_type_raw = data.get("event_type", "") + event_type = event_type_raw if isinstance(event_type_raw, str) else "" + + # Validate event type + if event_type not in {"played", "downloaded"}: + return Response("Invalid event type", status_code=400) + + # Get user ID if logged in (None for anonymous) + user_id = request.session.get("user_id") + + # Track the event + Core.Database.track_episode_metric(episode_id, event_type, user_id) + + return Response("", status_code=200) + + class BaseWebTest(Test.TestCase): """Base class for web tests with database setup.""" -- cgit v1.2.3