X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/0dd00c51dfdbda93e1b9c4612477cd05109d4517..9ff5f2ac22360b1ff3ef2473c15d4acfd1e7769b:/src/documents/api/views.py?ds=sidebyside diff --git a/src/documents/api/views.py b/src/documents/api/views.py new file mode 100644 index 00000000..a2f3529d --- /dev/null +++ b/src/documents/api/views.py @@ -0,0 +1,74 @@ +from rest_framework.generics import RetrieveAPIView, RetrieveUpdateAPIView, ListAPIView, ListCreateAPIView +from rest_framework.permissions import IsAuthenticatedOrReadOnly +from django.http import Http404 +from .. import models +from . import serializers + + +class BookList(ListAPIView): + serializer_class = serializers.BookSerializer + search_fields = ['title'] + + def get_queryset(self): + return models.Book.get_visible_for(self.request.user) + + +class BookDetail(RetrieveAPIView): + serializer_class = serializers.BookDetailSerializer + + def get_queryset(self): + return models.Book.get_visible_for(self.request.user) + + +class ChunkList(ListAPIView): + queryset = models.Chunk.objects.all() + serializer_class = serializers.ChunkSerializer + filter_fields = ['user', 'stage'] + search_fields = ['book__title'] + + def get_queryset(self): + return models.Chunk.get_visible_for(self.request.user) + + +class ChunkDetail(RetrieveUpdateAPIView): + permission_classes = [IsAuthenticatedOrReadOnly] + serializer_class = serializers.ChunkDetailSerializer + + def get_queryset(self): + return models.Chunk.get_visible_for(self.request.user) + + +class ChunkRevisionList(ListCreateAPIView): + permission_classes = [IsAuthenticatedOrReadOnly] + serializer_class = serializers.RevisionSerializer + + def get_serializer_class(self): + if self.request.method == 'POST': + return serializers.RevisionDetailSerializer + else: + return serializers.RevisionSerializer + + def get_serializer_context(self): + ctx = super().get_serializer_context() + try: + ctx["chunk"] = models.Chunk.objects.get(pk=self.kwargs['pk']) + except models.Chunk.DoesNotExist: + raise Http404 + return ctx + + def get_queryset(self): + try: + return models.Chunk.get_visible_for(self.request.user).get( + pk=self.kwargs['pk'] + ).change_set.all() + except models.Chunk.DoesNotExist: + raise Http404() + + +class RevisionDetail(RetrieveAPIView): + queryset = models.Chunk.change_model.objects.all() + serializer_class = serializers.RevisionDetailSerializer + + def get_queryset(self): + return models.Chunk.get_revisions_visible_for(self.request.user) +