diff --git a/twitch/urls.py b/twitch/urls.py index bc60dbb..5394655 100644 --- a/twitch/urls.py +++ b/twitch/urls.py @@ -17,6 +17,124 @@ if TYPE_CHECKING: app_name = "twitch" +# We have /rss/ that is always the latest, and versioned version to not break users regexes. + + +rss_feeds_latest: list[URLPattern] = [ + # /rss/campaigns - RSS feed for latest drop campaigns. + # Example: + # https://ttvdrops.lovinator.space/rss/campaigns/ + # http://localhost:8000/rss/campaigns/ + path( + "rss/campaigns/", + DropCampaignFeed(), + name="campaign_feed", + ), + # /rss/games - RSS feed for latest games. + # Example: + # https://ttvdrops.lovinator.space/rss/games/ + # http://localhost:8000/rss/games/ + path( + "rss/games/", + GameFeed(), + name="game_feed", + ), + # /rss/games//campaigns/ - RSS feed for the latest drop campaigns of a specific game. + # Example: + # https://ttvdrops.lovinator.space/rss/games/21779/campaigns/ + # http://localhost:8000/rss/games/21779/campaigns/ + path( + "rss/games//campaigns/", + GameCampaignFeed(), + name="game_campaign_feed", + ), + # /rss/organizations/ - RSS feed for latest organizations. + # Example: + # https://ttvdrops.lovinator.space/rss/organizations/ + # http://localhost:8000/rss/organizations/ + path( + "rss/organizations/", + OrganizationFeed(), + name="organization_feed", + ), + # /rss/organizations//campaigns/ - RSS feed for campaigns of a specific organization. + # Example: + # https://ttvdrops.lovinator.space/rss/organizations/931fd934-2149-4a85-a6d8-2190aa4439f3/campaigns/ + # http://localhost:8000/rss/organizations/931fd934-2149-4a85-a6d8-2190aa4439f3/campaigns/ + path( + "rss/organizations//campaigns/", + OrganizationCampaignFeed(), + name="organization_campaign_feed", + ), + # /rss/reward-campaigns/ - RSS feed for campaigns of a specific organization. + # Example: + # https://ttvdrops.lovinator.space/rss/reward-campaigns + # http://localhost:8000/rss/organizations/931fd934-2149-4a85-a6d8-2190aa4439f3/campaigns/ + path( + "rss/reward-campaigns/", + RewardCampaignFeed(), + name="reward_campaign_feed", + ), +] + +v1_rss_feeds: list[URLPattern] = [ + # /rss/v1/campaigns - RSS feed for latest drop campaigns. + # Example: + # https://ttvdrops.lovinator.space/rss/campaigns/ + # http://localhost:8000/rss/campaigns/ + path( + "rss/v1/campaigns/", + DropCampaignFeed(), + name="campaign_feed_v1", + ), + # /rss/v1/games - RSS feed for latest games. + # Example: + # https://ttvdrops.lovinator.space/rss/games/ + # http://localhost:8000/rss/games/ + path( + "rss/v1/games/", + GameFeed(), + name="game_feed_v1", + ), + # /rss/games//campaigns/ - RSS feed for the latest drop campaigns of a specific game. + # Example: + # https://ttvdrops.lovinator.space/rss/games/21779/campaigns/ + # http://localhost:8000/rss/games/21779/campaigns/ + path( + "rss/v1/games//campaigns/", + GameCampaignFeed(), + name="game_campaign_feed_v1", + ), + # /rss/organizations/ - RSS feed for latest organizations. + # Example: + # https://ttvdrops.lovinator.space/rss/organizations/ + # http://localhost:8000/rss/organizations/ + path( + "rss/v1/organizations/", + OrganizationFeed(), + name="organization_feed_v1", + ), + # /rss/organizations//campaigns/ - RSS feed for campaigns of a specific organization. + # Example: + # https://ttvdrops.lovinator.space/rss/organizations/931fd934-2149-4a85-a6d8-2190aa4439f3/campaigns/ + # http://localhost:8000/rss/organizations/931fd934-2149-4a85-a6d8-2190aa4439f3/campaigns/ + path( + "rss/v1/organizations//campaigns/", + OrganizationCampaignFeed(), + name="organization_campaign_feed_v1", + ), + # /rss/reward-campaigns/ - RSS feed for campaigns of a specific organization. + # Example: + # https://ttvdrops.lovinator.space/rss/reward-campaigns + # http://localhost:8000/rss/organizations/931fd934-2149-4a85-a6d8-2190aa4439f3/campaigns/ + path( + "rss/v1/reward-campaigns/", + RewardCampaignFeed(), + name="reward_campaign_feed_v1", + ), +] + + urlpatterns: list[URLPattern] = [ path("", views.dashboard, name="dashboard"), path("badges/", views.badge_list_view, name="badge_list"), @@ -35,11 +153,7 @@ urlpatterns: list[URLPattern] = [ path("organizations//", views.organization_detail_view, name="organization_detail"), path("reward-campaigns/", views.reward_campaign_list_view, name="reward_campaign_list"), path("reward-campaigns//", views.reward_campaign_detail_view, name="reward_campaign_detail"), - path("rss/campaigns/", DropCampaignFeed(), name="campaign_feed"), - path("rss/games/", GameFeed(), name="game_feed"), - path("rss/games//campaigns/", GameCampaignFeed(), name="game_campaign_feed"), - path("rss/organizations/", OrganizationFeed(), name="organization_feed"), - path("rss/organizations//campaigns/", OrganizationCampaignFeed(), name="organization_campaign_feed"), - path("rss/reward-campaigns/", RewardCampaignFeed(), name="reward_campaign_feed"), path("search/", views.search_view, name="search"), + *rss_feeds_latest, + *v1_rss_feeds, ]