from drf_spectacular.utils import extend_schema from rest_framework import serializers, status from rest_framework.response import Response from ..base import SessionBaseAPIView from ..websocket_tickets import TICKET_MAX_AGE_SECONDS, issue_websocket_ticket class WebSocketTicketResponseSerializer(serializers.Serializer): ticket = serializers.CharField(read_only=True) expires_in = serializers.IntegerField(read_only=True) class WebSocketTicketAPIView(SessionBaseAPIView): throttle_scope = "websocket_ticket" @extend_schema( tags=["Auth"], summary="Получить одноразовый билет для WebSocket-подключения", request=None, responses={200: WebSocketTicketResponseSerializer}, ) def post(self, request): ticket = issue_websocket_ticket( user=request.user, session_id=self.get_current_session_id(request), ) return Response( {"ticket": ticket, "expires_in": TICKET_MAX_AGE_SECONDS}, status=status.HTTP_200_OK, )