diff --git a/templates/twitch/debug.html b/templates/twitch/debug.html
index 5fb3b9d..8e418dc 100644
--- a/templates/twitch/debug.html
+++ b/templates/twitch/debug.html
@@ -157,4 +157,22 @@
None ✅
{% endif %}
+
+
+ {% if campaigns_missing_dropcampaigndetails %}
+
+ {% for c in campaigns_missing_dropcampaigndetails %}
+ -
+ {{ c.name }}
+ (Game: {{ c.game.display_name }})
+ - Operations: {{ c.operation_names|join:", "|default:'(none)' }}
+
+ {% endfor %}
+
+ {% else %}
+ None ✅
+ {% endif %}
+
{% endblock content %}
diff --git a/twitch/views.py b/twitch/views.py
index bf4e5d1..20e593c 100644
--- a/twitch/views.py
+++ b/twitch/views.py
@@ -962,6 +962,15 @@ def debug_view(request: HttpRequest) -> HttpResponse:
{"trimmed_op": op_name, "count": count} for op_name, count in sorted(operation_names_counter.items())
]
+ campaigns_missing_dropcampaigndetails: QuerySet[DropCampaign] = (
+ DropCampaign.objects
+ .filter(
+ Q(operation_names__isnull=True) | ~Q(operation_names__icontains="DropCampaignDetails"),
+ )
+ .select_related("game")
+ .order_by("game__display_name", "name")
+ )
+
context: dict[str, Any] = {
"now": now,
"games_without_owner": games_without_owner,
@@ -972,6 +981,7 @@ def debug_view(request: HttpRequest) -> HttpResponse:
"duplicate_name_campaigns": duplicate_name_campaigns,
"active_missing_image": active_missing_image,
"operation_names_with_counts": operation_names_with_counts,
+ "campaigns_missing_dropcampaigndetails": campaigns_missing_dropcampaigndetails,
}
return render(