fix fav
[wolnelektury.git] / src / social / api / serializers.py
index 7a596d2..085783f 100644 (file)
@@ -12,17 +12,17 @@ class SettingsSerializer(serializers.ModelSerializer):
         fields = ['notifications']
 
 
         fields = ['notifications']
 
 
-class UserListItemsField(serializers.Field):
+class UserListBooksField(serializers.Field):
     def to_representation(self, value):
     def to_representation(self, value):
-        return value.userlistitem_set.exclude(deleted=True).exclude(book=None).values_list('book__slug', flat=True)
+        return list(value.userlistitem_set.exclude(deleted=True).exclude(book=None).values_list('book__slug', flat=True))
 
     def to_internal_value(self, value):
         return {'books': catalogue.models.Book.objects.filter(slug__in=value)}
 
 
 
     def to_internal_value(self, value):
         return {'books': catalogue.models.Book.objects.filter(slug__in=value)}
 
 
-class UserListSerializer(serializers.ModelSerializer):
+class UserListSerializerV2(serializers.ModelSerializer):
     client_id = serializers.CharField(write_only=True, required=False)
     client_id = serializers.CharField(write_only=True, required=False)
-    books = UserListItemsField(source='*', required=False)
+    books = UserListBooksField(source='*', required=False)
     timestamp = serializers.IntegerField(required=False)
 
     class Meta:
     timestamp = serializers.IntegerField(required=False)
 
     class Meta:
@@ -67,7 +67,7 @@ class UserListSerializer(serializers.ModelSerializer):
         return instance
 
 
         return instance
 
 
-class UserListBooksSerializer(UserListSerializer):
+class UserListBooksSerializer(UserListSerializerV2):
     class Meta:
         model = models.UserList
         fields = ['books']
     class Meta:
         model = models.UserList
         fields = ['books']
@@ -75,7 +75,7 @@ class UserListBooksSerializer(UserListSerializer):
 
 class UserListItemSerializer(serializers.ModelSerializer):
     client_id = serializers.CharField(write_only=True, required=False)
 
 class UserListItemSerializer(serializers.ModelSerializer):
     client_id = serializers.CharField(write_only=True, required=False)
-    favorites = serializers.BooleanField(required=False)
+    favorites = serializers.BooleanField(read_only=True)
     list_slug = serializers.SlugRelatedField(
         queryset=models.UserList.objects.all(),
         source='list',
     list_slug = serializers.SlugRelatedField(
         queryset=models.UserList.objects.all(),
         source='list',
@@ -114,6 +114,39 @@ class UserListItemSerializer(serializers.ModelSerializer):
         }
 
 
         }
 
 
+class UserListSerializerV3(serializers.ModelSerializer):
+    client_id = serializers.CharField(write_only=True, required=False)
+    timestamp = serializers.IntegerField(required=False)
+
+    class Meta:
+        model = models.UserList
+        fields = [
+            'timestamp',
+            'client_id',
+            'name',
+            'slug',
+            'favorites',
+            'deleted',
+        ]
+        read_only_fields = [
+            'favorites',
+            'slug',
+        ]
+        extra_kwargs = {
+            'slug': {
+                'required': False
+            }
+        }
+
+    def create(self, validated_data):
+        instance = models.UserList.get_by_name(
+            validated_data['user'],
+            validated_data['name'],
+            create=True
+        )
+        return instance
+
+
 class ProgressSerializer(serializers.ModelSerializer):
     book = serializers.HyperlinkedRelatedField(
         read_only=True,
 class ProgressSerializer(serializers.ModelSerializer):
     book = serializers.HyperlinkedRelatedField(
         read_only=True,