filters api
authorRadek Czajka <rczajka@rczajka.pl>
Mon, 10 Mar 2025 14:16:17 +0000 (15:16 +0100)
committerRadek Czajka <rczajka@rczajka.pl>
Mon, 10 Mar 2025 14:16:17 +0000 (15:16 +0100)
src/catalogue/api/serializers.py
src/catalogue/api/urls2.py
src/catalogue/api/views.py

index 3e3874d..60e52a0 100644 (file)
@@ -350,3 +350,9 @@ class FragmentDetailSerializer(serializers.ModelSerializer):
     class Meta:
         model = Fragment
         fields = ['book', 'anchor', 'text', 'url', 'themes']
+
+
+class FilterTagSerializer(serializers.ModelSerializer):
+    class Meta:
+        model = Tag
+        fields = ['id', 'category', 'name']
index 164cdca..b16af66 100644 (file)
@@ -20,6 +20,11 @@ urlpatterns = [
          name='catalogue_api_book'
          ),
 
+    path('suggested-tags/',
+         piwik_track_view(views.SuggestedTags.as_view()),
+         name='catalogue_api_suggested_tags'
+         ),
+
     path('authors/',
          piwik_track_view(views.AuthorList.as_view()),
          name="catalogue_api_author_list"),
index dac1968..0e758b1 100644 (file)
@@ -19,6 +19,7 @@ from rest_framework import status
 from api.handlers import read_tags
 from api.utils import vary_on_auth
 from catalogue.forms import BookImportForm
+from catalogue.helpers import get_top_level_related_tags
 from catalogue.models import Book, Collection, Tag, Fragment, BookMedia
 from catalogue.models.tag import prefetch_relations
 from club.models import Membership
@@ -493,3 +494,13 @@ class FragmentView(RetrieveAPIView):
             book__slug=self.kwargs['book'],
             anchor=self.kwargs['anchor']
         )
+
+
+class SuggestedTags(ListAPIView):
+    serializer_class = serializers.FilterTagSerializer
+
+    def get_queryset(self):
+        tag_ids = self.request.GET.getlist('tag', [])
+        tags = [get_object_or_404(Tag, id=tid) for tid in tag_ids]
+        related_tags = list(t.id for t in get_top_level_related_tags(tags))
+        return Tag.objects.filter(id__in=related_tags)