61 lines
2.1 KiB
Python
61 lines
2.1 KiB
Python
from uuid import UUID
|
|
|
|
from drf_spectacular.utils import OpenApiParameter, extend_schema
|
|
from rest_framework import status
|
|
from rest_framework.response import Response
|
|
from rest_framework.views import APIView
|
|
|
|
from apps.chat.serializers.messages import MessageSerializer, SendMessageSerializer
|
|
from apps.chat.services.message import MessageService
|
|
|
|
|
|
class MessageView(APIView):
|
|
authentication_classes = []
|
|
permission_classes = []
|
|
|
|
@extend_schema(
|
|
request=SendMessageSerializer,
|
|
responses={201: MessageSerializer},
|
|
)
|
|
def post(self, request, chat_id):
|
|
serializer = SendMessageSerializer(data=request.data)
|
|
serializer.is_valid(raise_exception=True)
|
|
data = serializer.validated_data
|
|
|
|
result = MessageService().send(
|
|
conversation_id=UUID(str(chat_id)),
|
|
sender_id=data["sender_id"],
|
|
message_type=data["message_type"],
|
|
text=data.get("text"),
|
|
file=data.get("file"),
|
|
)
|
|
|
|
return Response(MessageSerializer(result).data, status=status.HTTP_201_CREATED)
|
|
|
|
@extend_schema(
|
|
parameters=[
|
|
OpenApiParameter("page", int, description="0-based page number", default=0),
|
|
OpenApiParameter("per_page", int, description="Results per page", default=20),
|
|
OpenApiParameter(
|
|
"since",
|
|
int,
|
|
required=False,
|
|
description="Return only posts after this Unix timestamp (milliseconds)",
|
|
),
|
|
],
|
|
responses={200: MessageSerializer(many=True)},
|
|
)
|
|
def get(self, request, chat_id):
|
|
page = int(request.query_params.get("page", 0))
|
|
per_page = int(request.query_params.get("per_page", 20))
|
|
since_raw = request.query_params.get("since")
|
|
since = int(since_raw) if since_raw else None
|
|
|
|
messages = MessageService().list_messages(
|
|
conversation_id=UUID(str(chat_id)),
|
|
page=page,
|
|
per_page=per_page,
|
|
since=since,
|
|
)
|
|
|
|
return Response(MessageSerializer(messages, many=True).data)
|