X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/aa20c637378d84ac13f7820662792cb69ffe0826..a5c70197db0e6d7d2f2c90588317925efd4d63ce:/src/search/api/views.py?ds=inline diff --git a/src/search/api/views.py b/src/search/api/views.py index 1ce66a964..17642d135 100644 --- a/src/search/api/views.py +++ b/src/search/api/views.py @@ -3,7 +3,10 @@ # from rest_framework.generics import ListAPIView from rest_framework.response import Response +from rest_framework import serializers from rest_framework.views import APIView +import catalogue.models +import catalogue.api.serializers from search.views import get_hints from search.forms import SearchFilters @@ -12,6 +15,9 @@ class HintView(APIView): def get(self, request): term = request.query_params.get('q') hints = get_hints(term, request.user) + for h in hints: + if h.get('img'): + h['img'] = request.build_absolute_uri(h['img']) return Response(hints) @@ -19,15 +25,68 @@ class SearchView(APIView): def get(self, request): term = self.request.query_params.get('q') f = SearchFilters({'q': term}) - r = {} if f.is_valid(): r = f.results() - return Response(r) + res = {} + rl = res['author'] = [] + c = {'request': request} + for item in r['author']: + rl.append( + catalogue.api.serializers.AuthorSerializer(item, context=c).data + ) + rl = res['genre'] = [] + for item in r['genre']: + rl.append( + catalogue.api.serializers.GenreSerializer(item, context=c).data + ) + rl = res['theme'] = [] + for item in r['theme']: + rl.append( + catalogue.api.serializers.ThemeSerializer(item, context=c).data + ) + + return Response(res) + class BookSearchView(ListAPIView): - def get_queryset(self, request): + serializer_class = catalogue.api.serializers.BookSerializer2 + + def get_queryset(self): term = self.request.query_params.get('q') + f = SearchFilters({'q': term}) + if f.is_valid(): + r = f.results() + return r['book'] + return [] + + + +class SnippetSerializer(serializers.ModelSerializer): + anchor = serializers.CharField(source='sec') + headline = serializers.CharField() + + class Meta: + model = catalogue.models.Snippet + fields = ['anchor', 'headline'] + + +class BookSnippetsSerializer(serializers.Serializer): + book = catalogue.api.serializers.BookSerializer2() + snippets = SnippetSerializer(many=True) + class TextSearchView(ListAPIView): - def get_queryset(self, request): + serializer_class = BookSnippetsSerializer + + def get_queryset(self): term = self.request.query_params.get('q') + f = SearchFilters({'q': term}) + if f.is_valid(): + r = f.results() + r = list({ + 'book': book, + 'snippets': snippets + } for (book, snippets) in r['snippet'].items()) + return r + return [] +