X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/5aa13410812d3fc4b35c039bdc3f0a2edc5185a1..24f677a3979ba3f1bdfe420c03ad5e3f8b0398c2:/src/api/views.py?ds=sidebyside diff --git a/src/api/views.py b/src/api/views.py new file mode 100644 index 000000000..812be832c --- /dev/null +++ b/src/api/views.py @@ -0,0 +1,41 @@ +from django.http import Http404 +from rest_framework.permissions import IsAuthenticated +from rest_framework.response import Response +from rest_framework.views import APIView +from rest_framework.generics import RetrieveAPIView, get_object_or_404 +from catalogue.models import Book +from .models import BookUserData +from . import serializers + + +class UserView(RetrieveAPIView): + permission_classes = [IsAuthenticated] + serializer_class = serializers.UserSerializer + + def get_object(self): + return self.request.user + + +class BookUserDataView(RetrieveAPIView): + permission_classes = [IsAuthenticated] + serializer_class = serializers.BookUserDataSerializer + lookup_field = 'book__slug' + lookup_url_kwarg = 'slug' + + def get_queryset(self): + return BookUserData.objects.filter(user=self.request.user) + + def get(self, *args, **kwargs): + try: + return super(BookUserDataView, self).get(*args, **kwargs) + except Http404: + return Response({"state": "not_started"}) + + def post(self, request, slug, state): + if state not in ('reading', 'complete'): + raise Http404 + + book = get_object_or_404(Book, slug=slug) + instance = BookUserData.update(book, request.user, state) + serializer = self.get_serializer(instance) + return Response(serializer.data)