X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/b37e135d6fc3938fe91fbb5462f6fdd11797199e..39c7b0bdbe5157ba606196042b2a7309d492eca0:/src/push/api/views.py diff --git a/src/push/api/views.py b/src/push/api/views.py index 9f838d2a4..0c575b92e 100644 --- a/src/push/api/views.py +++ b/src/push/api/views.py @@ -1,5 +1,5 @@ from rest_framework import serializers -from rest_framework.generics import ListCreateAPIView, RetrieveUpdateDestroyAPIView +from rest_framework.generics import ListCreateAPIView from rest_framework.permissions import IsAuthenticated from api.utils import never_cache from api.fields import AbsoluteURLField @@ -7,22 +7,33 @@ from push import models class DeviceTokenSerializer(serializers.ModelSerializer): - href = AbsoluteURLField( - view_name='push_api_device_token', - view_args=('pk',) - ) + deleted = serializers.BooleanField(default=False, write_only=True) + # Explicit definition to disable unique validator. + token = serializers.CharField() class Meta: model = models.DeviceToken - fields = ['token', 'created_at', 'updated_at', 'href'] + fields = ['token', 'created_at', 'updated_at', 'deleted'] read_only_fields = ['created_at', 'updated_at'] + def save(self): + if self.validated_data['deleted']: + self.destroy(self.validated_data) + else: + return self.create(self.validated_data) + def create(self, validated_data): - return models.DeviceToken.objects.create( + obj, created = models.DeviceToken.objects.get_or_create( user=self.context['request'].user, - **validated_data + token=validated_data['token'], ) + return obj + def destroy(self, validated_data): + models.DeviceToken.objects.filter( + user=self.context['request'].user, + token=validated_data['token'] + ).delete() @never_cache class DeviceTokensView(ListCreateAPIView): @@ -31,12 +42,3 @@ class DeviceTokensView(ListCreateAPIView): def get_queryset(self): return models.DeviceToken.objects.filter(user=self.request.user) - - -@never_cache -class DeviceTokenView(RetrieveUpdateDestroyAPIView): - permission_classes = [IsAuthenticated] - serializer_class = DeviceTokenSerializer - - def get_queryset(self): - return models.DeviceToken.objects.filter(user=self.request.user)