chat implemented, testing needed
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
from rest_framework import serializers
|
||||
from .models import Chat, Message, MessageFile, MessageHistory, MessageReaction
|
||||
from drf_spectacular.utils import extend_schema_field
|
||||
from .models import Chat, ChatReadStatus, Message, MessageFile, MessageHistory, MessageReaction
|
||||
|
||||
|
||||
class MessageFileSerializer(serializers.ModelSerializer):
|
||||
@@ -60,14 +61,28 @@ class MessageSendSerializer(serializers.Serializer):
|
||||
|
||||
|
||||
class ChatSerializer(serializers.ModelSerializer):
|
||||
unread_count = serializers.SerializerMethodField(read_only=True)
|
||||
|
||||
@extend_schema_field(serializers.IntegerField())
|
||||
def get_unread_count(self, obj):
|
||||
request = self.context.get('request')
|
||||
if not request or not request.user.is_authenticated:
|
||||
return 0
|
||||
last_read = ChatReadStatus.objects.filter(
|
||||
user=request.user, chat=obj
|
||||
).values_list('last_read_at', flat=True).first()
|
||||
if last_read is None:
|
||||
return obj.messages.filter(is_deleted=False).count()
|
||||
return obj.messages.filter(created_at__gt=last_read, is_deleted=False).count()
|
||||
|
||||
class Meta:
|
||||
model = Chat
|
||||
fields = [
|
||||
'id', 'chat_type', 'owner', 'name',
|
||||
'icon', 'banner', 'members', 'moderators',
|
||||
'hub', 'created_at', 'updated_at',
|
||||
'hub', 'created_at', 'updated_at', 'unread_count',
|
||||
]
|
||||
read_only_fields = ['owner', 'created_at', 'updated_at']
|
||||
read_only_fields = ['owner', 'created_at', 'updated_at', 'unread_count']
|
||||
|
||||
|
||||
class ChatMemberSerializer(serializers.Serializer):
|
||||
|
||||
Reference in New Issue
Block a user