X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/37c0f94336f330a8660a46b8b3052a24f4c9d5b5..0df4ebc27bdd7b5d5dbd53fba72ab156f399e4c1:/src/social/api/serializers.py diff --git a/src/social/api/serializers.py b/src/social/api/serializers.py index 7a596d261..085783f8a 100644 --- a/src/social/api/serializers.py +++ b/src/social/api/serializers.py @@ -12,17 +12,17 @@ class SettingsSerializer(serializers.ModelSerializer): fields = ['notifications'] -class UserListItemsField(serializers.Field): +class UserListBooksField(serializers.Field): 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)} -class UserListSerializer(serializers.ModelSerializer): +class UserListSerializerV2(serializers.ModelSerializer): 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: @@ -67,7 +67,7 @@ class UserListSerializer(serializers.ModelSerializer): return instance -class UserListBooksSerializer(UserListSerializer): +class UserListBooksSerializer(UserListSerializerV2): 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) - favorites = serializers.BooleanField(required=False) + favorites = serializers.BooleanField(read_only=True) 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,