missing abstract
[wolnelektury.git] / src / social / api / views.py
index a299304..22a0e9c 100644 (file)
@@ -11,7 +11,9 @@ from api.utils import vary_on_auth
 from catalogue.api.helpers import order_books, books_after
 from catalogue.api.serializers import BookSerializer
 from catalogue.models import Book
+import catalogue.models
 from social.utils import likes
+from social.views import get_sets_for_book_ids
 
 
 @vary_on_auth
@@ -32,6 +34,53 @@ class LikeView(APIView):
         return Response({})
 
 
+@vary_on_auth
+class LikeView2(APIView):
+    permission_classes = [IsAuthenticated]
+
+    def get(self, request, slug):
+        book = get_object_or_404(Book, slug=slug)
+        return Response({"likes": likes(request.user, book)})
+
+    def put(self, request, slug):
+        book = get_object_or_404(Book, slug=slug)
+        book.like(request.user)
+        return Response({"likes": likes(request.user, book)})
+
+    def delete(self, request, slug):
+        book = get_object_or_404(Book, slug=slug)
+        book.unlike(request.user)
+        return Response({"likes": likes(request.user, book)})
+
+
+@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 MyLikesView(APIView):
+    permission_classes = [IsAuthenticated]
+
+    def get(self, request):
+        ids = catalogue.models.tag.TagRelation.objects.filter(tag__user=request.user).values_list('object_id', flat=True).distinct()
+        books = Book.objects.filter(id__in=ids)
+        books = {b.id: b.slug for b in books}
+        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]