2024-07-25 19:12:31 +03:00
|
|
|
''' Serializers for persistent data manipulation. '''
|
|
|
|
from django.contrib.auth.models import User
|
|
|
|
from rest_framework import serializers
|
|
|
|
from rest_framework.serializers import PrimaryKeyRelatedField as PKField
|
|
|
|
|
|
|
|
from apps.rsform.models import Constituenta
|
|
|
|
|
|
|
|
from ..models import LibraryItem, Version
|
|
|
|
|
|
|
|
|
|
|
|
class LibraryItemBaseSerializer(serializers.ModelSerializer):
|
|
|
|
''' Serializer: LibraryItem entry full access. '''
|
|
|
|
class Meta:
|
|
|
|
''' serializer metadata. '''
|
|
|
|
model = LibraryItem
|
|
|
|
fields = '__all__'
|
|
|
|
read_only_fields = ('id',)
|
|
|
|
|
|
|
|
|
2024-08-01 00:35:49 +03:00
|
|
|
class LibraryItemReferenceSerializer(serializers.ModelSerializer):
|
|
|
|
''' Serializer: reference to LibraryItem. '''
|
|
|
|
class Meta:
|
|
|
|
''' serializer metadata. '''
|
|
|
|
model = LibraryItem
|
|
|
|
fields = 'id', 'alias'
|
|
|
|
|
|
|
|
|
2024-07-25 19:12:31 +03:00
|
|
|
class LibraryItemSerializer(serializers.ModelSerializer):
|
|
|
|
''' Serializer: LibraryItem entry limited access. '''
|
|
|
|
class Meta:
|
|
|
|
''' serializer metadata. '''
|
|
|
|
model = LibraryItem
|
|
|
|
fields = '__all__'
|
|
|
|
read_only_fields = ('id', 'item_type', 'owner', 'location', 'access_policy')
|
|
|
|
|
|
|
|
|
|
|
|
class LibraryItemCloneSerializer(serializers.ModelSerializer):
|
|
|
|
''' Serializer: LibraryItem cloning. '''
|
2024-08-07 21:54:14 +03:00
|
|
|
items = PKField(many=True, required=False, queryset=Constituenta.objects.all().only('pk'))
|
2024-07-25 19:12:31 +03:00
|
|
|
|
|
|
|
class Meta:
|
|
|
|
''' serializer metadata. '''
|
|
|
|
model = LibraryItem
|
|
|
|
exclude = ['id', 'item_type', 'owner']
|
|
|
|
|
|
|
|
|
|
|
|
class VersionSerializer(serializers.ModelSerializer):
|
|
|
|
''' Serializer: Version data. '''
|
|
|
|
class Meta:
|
|
|
|
''' serializer metadata. '''
|
|
|
|
model = Version
|
|
|
|
fields = 'id', 'version', 'item', 'description', 'time_create'
|
|
|
|
read_only_fields = ('id', 'item', 'time_create')
|
|
|
|
|
|
|
|
|
|
|
|
class VersionInnerSerializer(serializers.ModelSerializer):
|
|
|
|
''' Serializer: Version data for list of versions. '''
|
|
|
|
class Meta:
|
|
|
|
''' serializer metadata. '''
|
|
|
|
model = Version
|
|
|
|
fields = 'id', 'version', 'description', 'time_create'
|
|
|
|
read_only_fields = ('id', 'item', 'time_create')
|
|
|
|
|
|
|
|
|
|
|
|
class VersionCreateSerializer(serializers.ModelSerializer):
|
|
|
|
''' Serializer: Version create data. '''
|
|
|
|
class Meta:
|
|
|
|
''' serializer metadata. '''
|
|
|
|
model = Version
|
|
|
|
fields = 'version', 'description'
|
|
|
|
|
|
|
|
|
|
|
|
class LibraryItemDetailsSerializer(serializers.ModelSerializer):
|
|
|
|
''' Serializer: LibraryItem detailed data. '''
|
|
|
|
subscribers = serializers.SerializerMethodField()
|
|
|
|
editors = serializers.SerializerMethodField()
|
|
|
|
versions = serializers.SerializerMethodField()
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
''' serializer metadata. '''
|
|
|
|
model = LibraryItem
|
|
|
|
fields = '__all__'
|
|
|
|
read_only_fields = ('owner', 'id', 'item_type')
|
|
|
|
|
|
|
|
def get_subscribers(self, instance: LibraryItem) -> list[int]:
|
2024-08-06 23:13:57 +03:00
|
|
|
return list(instance.subscribers().values_list('pk', flat=True))
|
2024-07-25 19:12:31 +03:00
|
|
|
|
|
|
|
def get_editors(self, instance: LibraryItem) -> list[int]:
|
2024-08-06 22:27:51 +03:00
|
|
|
return list(instance.editors().values_list('pk', flat=True))
|
2024-07-25 19:12:31 +03:00
|
|
|
|
|
|
|
def get_versions(self, instance: LibraryItem) -> list:
|
|
|
|
return [VersionInnerSerializer(item).data for item in instance.versions()]
|
|
|
|
|
|
|
|
|
|
|
|
class UserTargetSerializer(serializers.Serializer):
|
|
|
|
''' Serializer: Target single User. '''
|
2024-08-05 23:53:07 +03:00
|
|
|
user = PKField(many=False, queryset=User.objects.all().only('pk'))
|
2024-07-25 19:12:31 +03:00
|
|
|
|
|
|
|
|
|
|
|
class UsersListSerializer(serializers.Serializer):
|
|
|
|
''' Serializer: List of Users. '''
|
2024-08-05 23:53:07 +03:00
|
|
|
users = PKField(many=True, queryset=User.objects.all().only('pk'))
|