path('login/', csrf_exempt(views.Login2View.as_view())),
path('me/', views.UserView.as_view()),
path('', include('catalogue.api.urls2')),
+ path('', include('social.api.urls2')),
]
fields = ['book', 'anchor', 'text', 'url', 'themes']
+class FragmentSerializer2(serializers.ModelSerializer):
+ url = AbsoluteURLField()
+ html = serializers.CharField(source='text')
+
+ class Meta:
+ model = Fragment
+ fields = ['anchor', 'html', 'url']
+
+
class FilterTagSerializer(serializers.ModelSerializer):
class Meta:
model = Tag
piwik_track_view(views.BookDetail2.as_view()),
name='catalogue_api_book'
),
+ path('books/<slug:slug>/fragment/',
+ piwik_track_view(views.BookFragmentView.as_view()),
+ name='catalogue_api_book_fragment'
+ ),
path('suggested-tags/',
piwik_track_view(views.SuggestedTags.as_view()),
def get_queryset(self):
tag_ids = self.request.GET.getlist('tag', [])
+ search = self.request.GET.get('search')
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)
+ tags = Tag.objects.filter(id__in=related_tags)
+ if search:
+ tags = tags.filter(name__icontains=search)
+ return tags
+
+
+class BookFragmentView(RetrieveAPIView):
+ serializer_class = serializers.FragmentSerializer2
+
+ def get_object(self):
+ book = get_object_or_404(Book, slug=self.kwargs['slug'])
+ return book.choose_fragment()
+
--- /dev/null
+# This file is part of Wolne Lektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Wolne Lektury. See NOTICE for more information.
+#
+from django.urls import path
+from stats.utils import piwik_track_view
+from . import views
+
+
+urlpatterns = [
+ path('like/<slug:slug>/',
+ piwik_track_view(views.LikeView.as_view()),
+ name='social_api_like'),
+ path('likes/', views.LikesView.as_view()),
+]
+
+
from catalogue.api.serializers import BookSerializer
from catalogue.models import Book
from social.utils import likes
+from social.views import get_sets_for_book_ids
@vary_on_auth
return Response({})
+@vary_on_auth
+class LikesView(APIView):
+ permission_classes = [IsAuthenticated]
+
+ def get(self, request):
+ slugs = request.GET.getlist('slug')
+ books = Book.objects.filter(slug__in=slugs)
+ books = {b.id: b.slug for b in books}
+ ids = books.keys()
+ res = get_sets_for_book_ids(ids, request.user)
+ res = {books[bid]: v for bid, v in res.items()}
+ return Response(res)
+
+
+
@vary_on_auth
class ShelfView(ListAPIView):
permission_classes = [IsAuthenticated]