Fixes: 1) Replace generic serializers with context-specific implementations in schema definitions. Extra: 1) Minor code cleanup and reorganization for improved readability and maintainability; 2) Add comments for new serializers.
112 lines
3.1 KiB
Python
112 lines
3.1 KiB
Python
from rest_framework.fields import CharField, BooleanField, IntegerField, ListField
|
|
from rest_framework.serializers import Serializer
|
|
|
|
|
|
# Generic/common serializers
|
|
class ErrorResponseSerializer(Serializer):
|
|
error = CharField(required=True)
|
|
detail = CharField(required=False)
|
|
|
|
|
|
class PongResponseSerializer(Serializer):
|
|
type = CharField(required=True)
|
|
|
|
|
|
# User message consumer
|
|
class UserMessageRequestSerializer(Serializer):
|
|
text = CharField(required=True)
|
|
|
|
|
|
class UserMessageResponseSerializer(Serializer):
|
|
ok = BooleanField(required=True)
|
|
thread_id = CharField(required=True)
|
|
message_id = CharField(required=True)
|
|
|
|
|
|
# Staff inbox consumer
|
|
class InboxThreadItemSerializer(Serializer):
|
|
uuid = CharField(required=True)
|
|
user_id = IntegerField(required=False, allow_null=True)
|
|
email = CharField(required=True)
|
|
assigned_to_id = IntegerField(required=False, allow_null=True)
|
|
last_message_at = CharField(required=True)
|
|
|
|
|
|
class StaffInboxListResponseSerializer(Serializer):
|
|
type = CharField(required=True)
|
|
threads = ListField(child=InboxThreadItemSerializer())
|
|
|
|
|
|
class StaffAssignRequestSerializer(Serializer):
|
|
action = CharField(required=True)
|
|
thread_id = CharField(required=True)
|
|
|
|
|
|
class StaffAssignResponseSerializer(Serializer):
|
|
type = CharField(required=True)
|
|
thread_id = CharField(required=True)
|
|
user = CharField(required=True)
|
|
|
|
|
|
class StaffReplyRequestSerializer(Serializer):
|
|
action = CharField(required=True)
|
|
thread_id = CharField(required=True)
|
|
text = CharField(required=True)
|
|
|
|
|
|
class StaffReplyResponseSerializer(Serializer):
|
|
type = CharField(required=True)
|
|
message_id = CharField(required=True)
|
|
|
|
|
|
class StaffCloseRequestSerializer(Serializer):
|
|
action = CharField(required=True)
|
|
thread_id = CharField(required=True)
|
|
|
|
|
|
class StaffCloseResponseSerializer(Serializer):
|
|
type = CharField(required=True)
|
|
thread_id = CharField(required=True)
|
|
|
|
|
|
class StaffInboxEventSerializer(Serializer):
|
|
"""A flexible event serializer for staff inbox messages over WS."""
|
|
|
|
type = CharField(required=True)
|
|
# Optional fields depending on event type
|
|
threads = ListField(child=InboxThreadItemSerializer(), required=False)
|
|
thread_id = CharField(required=False)
|
|
user = CharField(required=False)
|
|
message_id = CharField(required=False)
|
|
error = CharField(required=False)
|
|
detail = CharField(required=False)
|
|
|
|
|
|
# Thread consumer
|
|
class ThreadReplyRequestSerializer(Serializer):
|
|
action = CharField(required=True)
|
|
text = CharField(required=True)
|
|
|
|
|
|
class ThreadReplyResponseSerializer(Serializer):
|
|
type = CharField(required=True)
|
|
message_id = CharField(required=True)
|
|
|
|
|
|
class ThreadCloseRequestSerializer(Serializer):
|
|
action = CharField(required=True)
|
|
|
|
|
|
class ThreadCloseResponseSerializer(Serializer):
|
|
type = CharField(required=True)
|
|
thread_id = CharField(required=True)
|
|
|
|
|
|
class ThreadOkResponseSerializer(Serializer):
|
|
thread = CharField(required=True)
|
|
ok = BooleanField(required=True)
|
|
|
|
|
|
class ThreadPongResponseSerializer(Serializer):
|
|
type = CharField(required=True)
|
|
thread = CharField(required=True)
|