Remove operation_name filter from DropCampaign queries

This commit is contained in:
Joakim Hellsén 2026-01-11 20:54:39 +01:00
commit 4f254f7cba
No known key found for this signature in database
3 changed files with 9 additions and 24 deletions

View file

@ -468,10 +468,7 @@ class DropCampaignFeed(Feed):
def items(self) -> list[DropCampaign]: def items(self) -> list[DropCampaign]:
"""Return the latest 100 drop campaigns.""" """Return the latest 100 drop campaigns."""
return list( return list(
DropCampaign.objects DropCampaign.objects.select_related("game").order_by("-added_at")[:100],
.filter(operation_name="DropCampaignDetails")
.select_related("game")
.order_by("-added_at")[:100],
) )
def item_title(self, item: Model) -> SafeText: def item_title(self, item: Model) -> SafeText:
@ -615,10 +612,7 @@ class GameCampaignFeed(Feed):
def items(self, obj: Game) -> list[DropCampaign]: def items(self, obj: Game) -> list[DropCampaign]:
"""Return the latest 100 drop campaigns for this game, ordered by most recently added.""" """Return the latest 100 drop campaigns for this game, ordered by most recently added."""
return list( return list(
DropCampaign.objects DropCampaign.objects.filter(game=obj).select_related("game").order_by("-added_at")[:100],
.filter(game=obj, operation_name="DropCampaignDetails")
.select_related("game")
.order_by("-added_at")[:100],
) )
@ -653,10 +647,7 @@ class OrganizationCampaignFeed(Feed):
def items(self, obj: Organization) -> list[DropCampaign]: def items(self, obj: Organization) -> list[DropCampaign]:
"""Return the latest 100 drop campaigns for this organization, ordered by most recently added.""" """Return the latest 100 drop campaigns for this organization, ordered by most recently added."""
return list( return list(
DropCampaign.objects DropCampaign.objects.filter(game__owners=obj).select_related("game").order_by("-added_at")[:100],
.filter(game__owners=obj, operation_name="DropCampaignDetails")
.select_related("game")
.order_by("-added_at")[:100],
) )
def item_author_name(self, item: DropCampaign) -> str: def item_author_name(self, item: DropCampaign) -> str:

View file

@ -26,8 +26,8 @@ urlpatterns: list[URLPattern] = [
path("docs/rss/", views.docs_rss_view, name="docs_rss"), path("docs/rss/", views.docs_rss_view, name="docs_rss"),
path("emotes/", views.emote_gallery_view, name="emote_gallery"), path("emotes/", views.emote_gallery_view, name="emote_gallery"),
path("games/", views.GamesGridView.as_view(), name="game_list"), path("games/", views.GamesGridView.as_view(), name="game_list"),
path("games/<str:twitch_id>/", views.GameDetailView.as_view(), name="game_detail"),
path("games/list/", views.GamesListView.as_view(), name="game_list_simple"), path("games/list/", views.GamesListView.as_view(), name="game_list_simple"),
path("games/<str:twitch_id>/", views.GameDetailView.as_view(), name="game_detail"),
path("organizations/", views.org_list_view, name="org_list"), path("organizations/", views.org_list_view, name="org_list"),
path("organizations/<str:twitch_id>/", views.organization_detail_view, name="organization_detail"), path("organizations/<str:twitch_id>/", views.organization_detail_view, name="organization_detail"),
path("rss/campaigns/", DropCampaignFeed(), name="campaign_feed"), path("rss/campaigns/", DropCampaignFeed(), name="campaign_feed"),

View file

@ -104,7 +104,6 @@ def search_view(request: HttpRequest) -> HttpResponse:
results["games"] = Game.objects.filter(Q(name__istartswith=query) | Q(display_name__istartswith=query)) results["games"] = Game.objects.filter(Q(name__istartswith=query) | Q(display_name__istartswith=query))
results["campaigns"] = DropCampaign.objects.filter( results["campaigns"] = DropCampaign.objects.filter(
Q(name__istartswith=query) | Q(description__icontains=query), Q(name__istartswith=query) | Q(description__icontains=query),
operation_name="DropCampaignDetails",
).select_related("game") ).select_related("game")
results["drops"] = TimeBasedDrop.objects.filter(name__istartswith=query).select_related("campaign") results["drops"] = TimeBasedDrop.objects.filter(name__istartswith=query).select_related("campaign")
results["benefits"] = DropBenefit.objects.filter(name__istartswith=query).prefetch_related( results["benefits"] = DropBenefit.objects.filter(name__istartswith=query).prefetch_related(
@ -120,7 +119,6 @@ def search_view(request: HttpRequest) -> HttpResponse:
) )
results["campaigns"] = DropCampaign.objects.filter( results["campaigns"] = DropCampaign.objects.filter(
Q(name__icontains=query) | Q(description__icontains=query), Q(name__icontains=query) | Q(description__icontains=query),
operation_name="DropCampaignDetails",
).select_related("game") ).select_related("game")
results["drops"] = TimeBasedDrop.objects.filter( results["drops"] = TimeBasedDrop.objects.filter(
name__icontains=query, name__icontains=query,
@ -242,7 +240,7 @@ def drop_campaign_list_view(request: HttpRequest) -> HttpResponse:
game_filter: str | None = request.GET.get("game") game_filter: str | None = request.GET.get("game")
status_filter: str | None = request.GET.get("status") status_filter: str | None = request.GET.get("status")
per_page: int = 100 per_page: int = 100
queryset: QuerySet[DropCampaign] = DropCampaign.objects.filter(operation_name="DropCampaignDetails") queryset: QuerySet[DropCampaign] = DropCampaign.objects.all()
if game_filter: if game_filter:
queryset = queryset.filter(game__twitch_id=game_filter) queryset = queryset.filter(game__twitch_id=game_filter)
@ -351,7 +349,6 @@ def drop_campaign_detail_view(request: HttpRequest, twitch_id: str) -> HttpRespo
try: try:
campaign: DropCampaign = DropCampaign.objects.prefetch_related("game__owners").get( campaign: DropCampaign = DropCampaign.objects.prefetch_related("game__owners").get(
twitch_id=twitch_id, twitch_id=twitch_id,
operation_name="DropCampaignDetails",
) )
except DropCampaign.DoesNotExist as exc: except DropCampaign.DoesNotExist as exc:
msg = "No campaign found matching the query" msg = "No campaign found matching the query"
@ -568,7 +565,7 @@ class GameDetailView(DetailView):
now: datetime.datetime = timezone.now() now: datetime.datetime = timezone.now()
all_campaigns: QuerySet[DropCampaign] = ( all_campaigns: QuerySet[DropCampaign] = (
DropCampaign.objects DropCampaign.objects
.filter(game=game, operation_name="DropCampaignDetails") .filter(game=game)
.prefetch_related("game__owners") .prefetch_related("game__owners")
.prefetch_related( .prefetch_related(
Prefetch( Prefetch(
@ -677,7 +674,7 @@ def dashboard(request: HttpRequest) -> HttpResponse:
now: datetime.datetime = timezone.now() now: datetime.datetime = timezone.now()
active_campaigns: QuerySet[DropCampaign] = ( active_campaigns: QuerySet[DropCampaign] = (
DropCampaign.objects DropCampaign.objects
.filter(start_at__lte=now, end_at__gte=now, operation_name="DropCampaignDetails") .filter(start_at__lte=now, end_at__gte=now)
.prefetch_related("game__owners") .prefetch_related("game__owners")
.prefetch_related( .prefetch_related(
"allow_channels", "allow_channels",
@ -735,7 +732,6 @@ def debug_view(request: HttpRequest) -> HttpResponse:
# Campaigns with missing or obviously broken images # Campaigns with missing or obviously broken images
broken_image_campaigns: QuerySet[DropCampaign] = DropCampaign.objects.filter( broken_image_campaigns: QuerySet[DropCampaign] = DropCampaign.objects.filter(
Q(image_url__isnull=True) | Q(image_url__exact="") | ~Q(image_url__startswith="http"), Q(image_url__isnull=True) | Q(image_url__exact="") | ~Q(image_url__startswith="http"),
operation_name="DropCampaignDetails",
).select_related("game") ).select_related("game")
# Benefits with missing images # Benefits with missing images
@ -755,14 +751,12 @@ def debug_view(request: HttpRequest) -> HttpResponse:
# Campaigns with invalid dates (start after end or missing either) # Campaigns with invalid dates (start after end or missing either)
invalid_date_campaigns: QuerySet[DropCampaign] = DropCampaign.objects.filter( invalid_date_campaigns: QuerySet[DropCampaign] = DropCampaign.objects.filter(
Q(start_at__gt=F("end_at")) | Q(start_at__isnull=True) | Q(end_at__isnull=True), Q(start_at__gt=F("end_at")) | Q(start_at__isnull=True) | Q(end_at__isnull=True),
operation_name="DropCampaignDetails",
).select_related("game") ).select_related("game")
# Duplicate campaign names per game. # Duplicate campaign names per game.
# We retrieve the game's name for user-friendly display. # We retrieve the game's name for user-friendly display.
duplicate_name_campaigns = ( duplicate_name_campaigns = (
DropCampaign.objects DropCampaign.objects
.filter(operation_name="DropCampaignDetails")
.values("game__display_name", "name", "game__twitch_id") .values("game__display_name", "name", "game__twitch_id")
.annotate(name_count=Count("twitch_id")) .annotate(name_count=Count("twitch_id"))
.filter(name_count__gt=1) .filter(name_count__gt=1)
@ -772,7 +766,7 @@ def debug_view(request: HttpRequest) -> HttpResponse:
# Campaigns currently active but image missing # Campaigns currently active but image missing
active_missing_image: QuerySet[DropCampaign] = ( active_missing_image: QuerySet[DropCampaign] = (
DropCampaign.objects DropCampaign.objects
.filter(start_at__lte=now, end_at__gte=now, operation_name="DropCampaignDetails") .filter(start_at__lte=now, end_at__gte=now)
.filter( .filter(
Q(image_url__isnull=True) | Q(image_url__exact="") | ~Q(image_url__startswith="http"), Q(image_url__isnull=True) | Q(image_url__exact="") | ~Q(image_url__startswith="http"),
) )
@ -942,7 +936,7 @@ class ChannelDetailView(DetailView):
now: datetime.datetime = timezone.now() now: datetime.datetime = timezone.now()
all_campaigns: QuerySet[DropCampaign] = ( all_campaigns: QuerySet[DropCampaign] = (
DropCampaign.objects DropCampaign.objects
.filter(allow_channels=channel, operation_name="DropCampaignDetails") .filter(allow_channels=channel)
.prefetch_related("game__owners") .prefetch_related("game__owners")
.prefetch_related( .prefetch_related(
Prefetch( Prefetch(