Allow email login
[wolnelektury.git] / src / push / api / views.py
index 9f838d2..0c575b9 100644 (file)
@@ -1,5 +1,5 @@
 from rest_framework import serializers
 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
 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):
 
 
 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
 
     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']
 
         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):
     def create(self, validated_data):
-        return models.DeviceToken.objects.create(
+        obj, created = models.DeviceToken.objects.get_or_create(
             user=self.context['request'].user,
             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):
 
 @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)
 
     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)