From 1501fe79a5abe6fc214309ade4ceb85f6bfd0328 Mon Sep 17 00:00:00 2001 From: Radek Czajka Date: Mon, 10 Mar 2025 15:16:17 +0100 Subject: [PATCH] filters api --- src/catalogue/api/serializers.py | 6 ++++++ src/catalogue/api/urls2.py | 5 +++++ src/catalogue/api/views.py | 11 +++++++++++ 3 files changed, 22 insertions(+) diff --git a/src/catalogue/api/serializers.py b/src/catalogue/api/serializers.py index 3e3874d3f..60e52a052 100644 --- a/src/catalogue/api/serializers.py +++ b/src/catalogue/api/serializers.py @@ -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'] diff --git a/src/catalogue/api/urls2.py b/src/catalogue/api/urls2.py index 164cdca39..b16af6651 100644 --- a/src/catalogue/api/urls2.py +++ b/src/catalogue/api/urls2.py @@ -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"), diff --git a/src/catalogue/api/views.py b/src/catalogue/api/views.py index dac1968ad..0e758b15e 100644 --- a/src/catalogue/api/views.py +++ b/src/catalogue/api/views.py @@ -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) -- 2.20.1