X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/044ee915f89f30b2935dbbcb4a5d5e4a91cbfca9..32e632734c0a8390775bb8661edc78c2045cf5f3:/src/social/api/views.py?ds=sidebyside diff --git a/src/social/api/views.py b/src/social/api/views.py index b10ea562b..402245dc9 100644 --- a/src/social/api/views.py +++ b/src/social/api/views.py @@ -2,9 +2,8 @@ # Copyright © Fundacja Wolne Lektury. See NOTICE for more information. # from datetime import datetime -from pytz import utc from django.http import Http404 -from django.utils.timezone import now +from django.utils.timezone import now, utc from rest_framework.generics import ListAPIView, ListCreateAPIView, RetrieveAPIView, RetrieveUpdateAPIView, RetrieveUpdateDestroyAPIView, get_object_or_404 from rest_framework.permissions import IsAuthenticated, IsAuthenticatedOrReadOnly from rest_framework.response import Response @@ -17,11 +16,26 @@ from catalogue.api.serializers import BookSerializer from catalogue.models import Book import catalogue.models from social.views import get_sets_for_book_ids +from social.utils import likes from social import models import bookmarks.models from bookmarks.api.views import BookmarkSerializer +class SettingsSerializer(serializers.ModelSerializer): + class Meta: + model = models.UserProfile + fields = ['notifications'] + + +class SettingsView(RetrieveUpdateAPIView): + permission_classes = [IsAuthenticated] + serializer_class = SettingsSerializer + + def get_object(self): + return models.UserProfile.get_for(self.request.user) + + @never_cache class LikeView(APIView): permission_classes = [IsAuthenticated] @@ -403,6 +417,8 @@ class SyncView(ListAPIView): def post(self, request): new_ids = [] data = request.data + if not isinstance(data, list): + raise serializers.ValidationError('Payload should be a list') for item in data: instance = self.get_instance(request.user, item) ser = self.get_serializer( @@ -463,8 +479,9 @@ class BookmarkSyncView(SyncView): sync_id_field = 'uuid' sync_id_serializer_field = 'uuid' - def get_queryset_for_ts(self, timestamp): - return self.model.objects.filter( - user=self.request.user, - created_at__gt=timestamp - ).order_by('created_at') + def get_instance(self, user, data): + ret = super().get_instance(user, data) + if ret is None: + if data.get('location'): + ret = self.model.get_by_location(user, data['location']) + return ret