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
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):
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)