This commit is contained in:
Iliyan Angelov
2025-09-14 23:24:25 +03:00
commit c67067a2a4
71311 changed files with 6800714 additions and 0 deletions

134
folders/serializers.py Normal file
View File

@@ -0,0 +1,134 @@
from rest_framework import serializers
from django.contrib.auth import get_user_model
from .models import FolderStructure, FolderPermission, FolderBookmark, FolderActivity
User = get_user_model()
class FolderStructureSerializer(serializers.ModelSerializer):
"""Serializer for folder structures."""
path = serializers.CharField(source='get_path', read_only=True)
children = serializers.SerializerMethodField()
email_count = serializers.SerializerMethodField()
unread_count = serializers.SerializerMethodField()
permissions = serializers.SerializerMethodField()
class Meta:
model = FolderStructure
fields = '__all__'
read_only_fields = ('user', 'created_at', 'updated_at')
def get_children(self, obj):
children = obj.get_children()
return FolderStructureSerializer(children, many=True, context=self.context).data
def get_email_count(self, obj):
# This would need to be implemented based on your email folder relationship
return 0
def get_unread_count(self, obj):
# This would need to be implemented based on your email folder relationship
return 0
def get_permissions(self, obj):
if obj.is_shared:
permissions = obj.permissions.all()
return FolderPermissionSerializer(permissions, many=True).data
return []
class FolderPermissionSerializer(serializers.ModelSerializer):
"""Serializer for folder permissions."""
user_name = serializers.CharField(source='user.get_full_name', read_only=True)
user_email = serializers.CharField(source='user.email', read_only=True)
granted_by_name = serializers.CharField(source='granted_by.get_full_name', read_only=True)
class Meta:
model = FolderPermission
fields = '__all__'
read_only_fields = ('granted_by', 'granted_at')
class FolderBookmarkSerializer(serializers.ModelSerializer):
"""Serializer for folder bookmarks."""
folder_name = serializers.CharField(source='folder.name', read_only=True)
folder_path = serializers.CharField(source='folder.get_path', read_only=True)
class Meta:
model = FolderBookmark
fields = '__all__'
read_only_fields = ('user', 'created_at')
class FolderActivitySerializer(serializers.ModelSerializer):
"""Serializer for folder activities."""
user_name = serializers.CharField(source='user.get_full_name', read_only=True)
user_email = serializers.CharField(source='user.email', read_only=True)
folder_name = serializers.CharField(source='folder.name', read_only=True)
class Meta:
model = FolderActivity
fields = '__all__'
read_only_fields = ('created_at',)
class FolderCreateSerializer(serializers.ModelSerializer):
"""Serializer for creating folders."""
class Meta:
model = FolderStructure
fields = ('name', 'description', 'parent', 'folder_type', 'color', 'icon', 'sort_order')
def validate_name(self, value):
user = self.context['request'].user
parent = self.initial_data.get('parent')
# Check for duplicate names in the same parent folder
if FolderStructure.objects.filter(
user=user,
name=value,
parent_id=parent
).exists():
raise serializers.ValidationError("A folder with this name already exists in the same location.")
return value
class FolderShareSerializer(serializers.Serializer):
"""Serializer for sharing folders."""
user_email = serializers.EmailField()
permission = serializers.ChoiceField(choices=FolderPermission.PERMISSION_CHOICES)
def validate_user_email(self, value):
user = self.context['request'].user
if value == user.email:
raise serializers.ValidationError("You cannot share a folder with yourself.")
try:
User.objects.get(email=value)
except User.DoesNotExist:
raise serializers.ValidationError("User with this email does not exist.")
return value
class FolderMoveSerializer(serializers.Serializer):
"""Serializer for moving folders."""
new_parent = serializers.IntegerField(required=False, allow_null=True)
new_sort_order = serializers.IntegerField(required=False)
def validate_new_parent(self, value):
if value is not None:
user = self.context['request'].user
try:
folder = FolderStructure.objects.get(id=value, user=user)
return folder
except FolderStructure.DoesNotExist:
raise serializers.ValidationError("Parent folder does not exist or you don't have access to it.")
return None