You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
57 lines
1.6 KiB
57 lines
1.6 KiB
from rest_framework import serializers
|
|
from apps.support.models import SupportRoom, SupportMessage
|
|
|
|
|
|
class SupportMessageSerializer(serializers.ModelSerializer):
|
|
sender_name = serializers.SerializerMethodField()
|
|
timestamp_ms = serializers.SerializerMethodField()
|
|
|
|
class Meta:
|
|
model = SupportMessage
|
|
fields = (
|
|
'id',
|
|
'room',
|
|
'sender_type',
|
|
'sender_name',
|
|
'content',
|
|
'is_read',
|
|
'created_at',
|
|
'timestamp_ms',
|
|
)
|
|
read_only_fields = fields
|
|
|
|
def get_sender_name(self, obj: SupportMessage) -> str:
|
|
if obj.sender_type == SupportMessage.SenderType.SUPPORT:
|
|
if obj.sender and obj.sender.fullname:
|
|
return obj.sender.fullname
|
|
return 'Support Specialist'
|
|
if obj.sender and obj.sender.fullname:
|
|
return obj.sender.fullname
|
|
return 'You'
|
|
|
|
def get_timestamp_ms(self, obj: SupportMessage) -> int:
|
|
if not obj.created_at:
|
|
return 0
|
|
return int(obj.created_at.timestamp() * 1000)
|
|
|
|
|
|
class SendSupportMessageSerializer(serializers.Serializer):
|
|
content = serializers.CharField(
|
|
required=True,
|
|
allow_blank=False,
|
|
max_length=4000,
|
|
trim_whitespace=True,
|
|
)
|
|
|
|
|
|
class SupportRoomSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = SupportRoom
|
|
fields = (
|
|
'id',
|
|
'status',
|
|
'unread_by_user',
|
|
'last_message_at',
|
|
'created_at',
|
|
)
|
|
read_only_fields = fields
|