updated chat andlayout
This commit is contained in:
@@ -4,6 +4,7 @@ from drf_spectacular.utils import extend_schema_field
|
||||
from .models import Chat, ChatReadStatus, Message, MessageFile, MessageHistory, MessageReaction
|
||||
|
||||
|
||||
|
||||
class MessageSenderSerializer(serializers.ModelSerializer):
|
||||
avatar = serializers.SerializerMethodField()
|
||||
|
||||
@@ -51,10 +52,42 @@ class ReplyToSerializer(serializers.ModelSerializer):
|
||||
|
||||
class MessageSerializer(serializers.ModelSerializer):
|
||||
sender = MessageSenderSerializer(read_only=True)
|
||||
reply_to = ReplyToSerializer(read_only=True)
|
||||
# reply_to is a SerializerMethodField so we can bypass ActiveManager and
|
||||
# still surface a tombstone when the original message is soft-deleted.
|
||||
reply_to = serializers.SerializerMethodField()
|
||||
media_files = MessageFileSerializer(many=True, read_only=True)
|
||||
reactions = MessageReactionSerializer(many=True, read_only=True)
|
||||
|
||||
@extend_schema_field(ReplyToSerializer)
|
||||
def get_reply_to(self, obj):
|
||||
"""
|
||||
Fetch the reply-to message via all_objects so soft-deleted originals
|
||||
are still accessible. Returns content=None when the message is deleted,
|
||||
which the frontend renders as a '(zpráva smazána)' tombstone.
|
||||
"""
|
||||
reply_to_id = obj.reply_to_id
|
||||
if not reply_to_id:
|
||||
return None
|
||||
try:
|
||||
msg = Message.all_objects.select_related('sender').get(pk=reply_to_id)
|
||||
except Message.DoesNotExist:
|
||||
return None
|
||||
|
||||
sender_data = None
|
||||
if msg.sender:
|
||||
from django.conf import settings
|
||||
avatar = (settings.MEDIA_URL + msg.sender.avatar.name) if msg.sender.avatar else None
|
||||
sender_data = {'id': msg.sender.id, 'username': msg.sender.username, 'avatar': avatar}
|
||||
else:
|
||||
sender_data = {'id': 0, 'username': '…', 'avatar': None}
|
||||
|
||||
return {
|
||||
'id': msg.id,
|
||||
# content=None signals the frontend to show the deleted tombstone
|
||||
'content': None if msg.is_deleted else msg.content,
|
||||
'sender': sender_data,
|
||||
}
|
||||
|
||||
class Meta:
|
||||
model = Message
|
||||
fields = [
|
||||
|
||||
Reference in New Issue
Block a user