First commit of claude's rework in django + vanillajs fronted
This commit is contained in:
105
apps/social/serializers.py
Normal file
105
apps/social/serializers.py
Normal file
@@ -0,0 +1,105 @@
|
||||
from django.contrib.auth import get_user_model
|
||||
from rest_framework import serializers
|
||||
|
||||
from .models import BlogPost, Bug, Friendship, Message
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
|
||||
def _user_mini(user):
|
||||
if user is None:
|
||||
return None
|
||||
name = (f'{user.first_name} {user.last_name}'.strip()) or user.username
|
||||
return {'id': user.id, 'username': user.username, 'display_name': name}
|
||||
|
||||
|
||||
# ── Message ───────────────────────────────────────────────────────────────────
|
||||
|
||||
class MessageListSerializer(serializers.ModelSerializer):
|
||||
sender_detail = serializers.SerializerMethodField()
|
||||
recipient_detail = serializers.SerializerMethodField()
|
||||
|
||||
def get_sender_detail(self, obj): return _user_mini(obj.sender)
|
||||
def get_recipient_detail(self, obj): return _user_mini(obj.recipient)
|
||||
|
||||
class Meta:
|
||||
model = Message
|
||||
fields = ['id', 'sender_detail', 'recipient_detail', 'subject', 'sent_at', 'read_at']
|
||||
|
||||
|
||||
class MessageDetailSerializer(serializers.ModelSerializer):
|
||||
sender_detail = serializers.SerializerMethodField()
|
||||
recipient_detail = serializers.SerializerMethodField()
|
||||
|
||||
def get_sender_detail(self, obj): return _user_mini(obj.sender)
|
||||
def get_recipient_detail(self, obj): return _user_mini(obj.recipient)
|
||||
|
||||
class Meta:
|
||||
model = Message
|
||||
fields = ['id', 'sender_detail', 'recipient_detail', 'subject', 'body', 'sent_at', 'read_at']
|
||||
|
||||
|
||||
class MessageCreateSerializer(serializers.ModelSerializer):
|
||||
recipient = serializers.PrimaryKeyRelatedField(queryset=User.objects.all())
|
||||
|
||||
class Meta:
|
||||
model = Message
|
||||
fields = ['recipient', 'subject', 'body']
|
||||
|
||||
def validate_recipient(self, value):
|
||||
if value == self.context['request'].user:
|
||||
raise serializers.ValidationError('You cannot send a message to yourself.')
|
||||
return value
|
||||
|
||||
|
||||
# ── BlogPost ──────────────────────────────────────────────────────────────────
|
||||
|
||||
class BlogPostSerializer(serializers.ModelSerializer):
|
||||
author_detail = serializers.SerializerMethodField()
|
||||
|
||||
def get_author_detail(self, obj): return _user_mini(obj.author)
|
||||
|
||||
class Meta:
|
||||
model = BlogPost
|
||||
fields = ['id', 'author_detail', 'title', 'body', 'is_public', 'created_at', 'updated_at']
|
||||
read_only_fields = ['created_at', 'updated_at']
|
||||
|
||||
|
||||
# ── Bug ───────────────────────────────────────────────────────────────────────
|
||||
|
||||
class BugSerializer(serializers.ModelSerializer):
|
||||
reporter_detail = serializers.SerializerMethodField()
|
||||
|
||||
def get_reporter_detail(self, obj): return _user_mini(obj.reporter)
|
||||
|
||||
class Meta:
|
||||
model = Bug
|
||||
fields = [
|
||||
'id', 'reporter_detail', 'title', 'description',
|
||||
'severity', 'status', 'created_at', 'updated_at', 'resolved_at',
|
||||
]
|
||||
read_only_fields = ['status', 'resolved_at', 'created_at', 'updated_at']
|
||||
|
||||
|
||||
# ── Friendship ────────────────────────────────────────────────────────────────
|
||||
|
||||
class FriendshipSerializer(serializers.ModelSerializer):
|
||||
from_user_detail = serializers.SerializerMethodField()
|
||||
to_user_detail = serializers.SerializerMethodField()
|
||||
|
||||
def get_from_user_detail(self, obj): return _user_mini(obj.from_user)
|
||||
def get_to_user_detail(self, obj): return _user_mini(obj.to_user)
|
||||
|
||||
class Meta:
|
||||
model = Friendship
|
||||
fields = ['id', 'from_user_detail', 'to_user_detail', 'status', 'created_at']
|
||||
read_only_fields = ['status', 'created_at']
|
||||
|
||||
|
||||
class FriendRequestSerializer(serializers.Serializer):
|
||||
to_user = serializers.PrimaryKeyRelatedField(queryset=User.objects.all())
|
||||
|
||||
def validate_to_user(self, value):
|
||||
if value == self.context['request'].user:
|
||||
raise serializers.ValidationError('You cannot send a friend request to yourself.')
|
||||
return value
|
||||
Reference in New Issue
Block a user