From 5c14982db388a15332afdb62c47566191cde244a Mon Sep 17 00:00:00 2001
From: Konrad Mohrfeldt <konrad.mohrfeldt@farbdev.org>
Date: Thu, 27 Mar 2025 18:10:21 +0100
Subject: [PATCH] feat: add ids and isShowHost filter to profiles api

---
 program/filters.py | 21 +++++++++++++++++++++
 program/views.py   |  3 ++-
 2 files changed, 23 insertions(+), 1 deletion(-)

diff --git a/program/filters.py b/program/filters.py
index f530bf1..dd78807 100644
--- a/program/filters.py
+++ b/program/filters.py
@@ -71,6 +71,16 @@ class ShowOrderingFilter(filters.OrderingFilter):
         return qs.order_by(*ordering)
 
 
+class DefaultFilterSet(filters.FilterSet):
+    ids = IntegerInFilter(
+        field_name="id",
+        help_text="Return only entities matching the specified id(s).",
+    )
+
+    class Meta:
+        fields = ("ids",)
+
+
 class ShowFilterSet(StaticFilterHelpTextMixin, filters.FilterSet):
     ids = IntegerInFilter(
         field_name="id",
@@ -408,3 +418,14 @@ class ImageFilterSet(filters.FilterSet):
 
     class Meta:
         fields = ("ids",)
+
+
+class ProfileFilterSet(DefaultFilterSet):
+    is_show_host = StaticQueryBooleanFilter(
+        query=Exists(models.Show.objects.filter(hosts=OuterRef("pk"))),
+        label="Is show host",
+        help_text="Return only profiles that are hosts of a show.",
+    )
+
+    class Meta:
+        fields = DefaultFilterSet.Meta.fields + ("is_show_host",)
diff --git a/program/views.py b/program/views.py
index 96393ec..18cbdef 100644
--- a/program/views.py
+++ b/program/views.py
@@ -1554,7 +1554,8 @@ class APIProfileViewSet(ActiveFilterMixin, viewsets.ModelViewSet):
     queryset = Profile.objects.all().order_by("-is_active", "name")
     serializer_class = ProfileSerializer
     pagination_class = LimitOffsetPagination
-    filter_backends = [drf_filters.SearchFilter]
+    filter_backends = [DjangoFilterBackend, drf_filters.SearchFilter]
+    filterset_class = filters.ProfileFilterSet
     search_fields = ["name", "email"]
 
     def get_serializer_context(self):
-- 
GitLab