X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/e70d66e668627a4d9c65900856ca7024d8d87fe1..0213808c52019edebba66cd0163867a441f8a4a0:/src/bookmarks/api/views.py diff --git a/src/bookmarks/api/views.py b/src/bookmarks/api/views.py index 315624fab..1280ad552 100644 --- a/src/bookmarks/api/views.py +++ b/src/bookmarks/api/views.py @@ -3,6 +3,7 @@ from api.utils import never_cache from django.db.models import Q from django.http import Http404, JsonResponse from django.shortcuts import render, get_object_or_404 +from django.utils.timezone import now from django.views.decorators import cache import catalogue.models from wolnelektury.utils import is_ajax @@ -111,3 +112,71 @@ class BookmarkView(RetrieveUpdateDestroyAPIView): return models.Bookmark.objects.filter(q) else: return self.request.user.bookmark_set.all() + + def perform_destroy(self, instance): + instance.deleted = True + instance.updated_at = now() + instance.save() + + + +class QuoteSerializer(serializers.ModelSerializer): + book_slug = serializers.SlugRelatedField( + queryset=catalogue.models.Book.objects.all(), slug_field='slug', + write_only=True, + required=False + ) + book = BookSerializer2(read_only=True) + href = AbsoluteURLField(view_name='api_quote', view_args=['uuid']) + timestamp = serializers.IntegerField(required=False) + + class Meta: + model = models.Quote + fields = ['book_slug', 'book', + 'start_elem', 'start_offset', 'end_elem', 'end_offset', + 'href', 'uuid', 'timestamp', 'deleted'] + read_only_fields = ['uuid', 'mode'] + + def create(self, validated_data): + book = validated_data.pop('book_slug', None) + if book is not None: + validated_data['book'] = book + return super().create(validated_data) + + def update(self, instance, validated_data): + book = validated_data.pop('book_slug', None) + if book is not None: + validated_data['book'] = book + return super().update(instance, validated_data) + + +@never_cache +class QuotesView(ListCreateAPIView): + permission_classes = [IsAuthenticated] + serializer_class = QuoteSerializer + + def get_queryset(self): + return self.request.user.quote_set.all() + + def perform_create(self, serializer): + serializer.save(user=self.request.user) + + +class QuoteView(RetrieveUpdateDestroyAPIView): + permission_classes = [IsAuthenticatedOrReadOnly] + serializer_class = QuoteSerializer + lookup_field = 'uuid' + + def get_queryset(self): + if self.request.method in SAFE_METHODS: + q = Q(deleted=False) + if self.request.user.is_authenticated: + q |= Q(user=self.request.user) + return models.Quote.objects.filter(q) + else: + return self.request.user.quote_set.all() + + def perform_destroy(self, instance): + instance.deleted = True + instance.updated_at = now() + instance.save()