from rest_framework.views import APIView from rest_framework.response import Response from rest_framework import permissions, status from rest_framework.authentication import SessionAuthentication from chat.models import AskModel from ..serializers.ask import AskSerializer from notice.consumers import notice_manager from django.contrib.auth.models import User class AskView(APIView): serializer_class = AskSerializer permission_classes = (permissions.IsAuthenticated,) authentication_classes = (SessionAuthentication,) def post(self, request): data: dict = request.data asker_id = request.user.pk asked_id = data["asked"] if (asked_id is None): return Response(status=status.HTTP_400_BAD_REQUEST) if AskModel().is_asked(asker_id, asked_id): return Response(status=status.HTTP_208_ALREADY_REPORTED) AskModel(asker_id=asker_id, asked_id=asked_id).save() return Response(status=status.HTTP_201_CREATED) def delete(self, request): data: dict = request.data asker_id = data["asker"] asked_id = request.user.pk if (asker_id is None): asker_id = request.user.id asked_id = data["asked"] if (asked_id is None): return Response(status=status.HTTP_400_BAD_REQUEST) if not AskModel().is_asked(asker_id, asked_id): return Response(status=status.HTTP_404_NOT_FOUND) # Don't need more verification, just above is enough asker = User.objects.get(pk=asker_id) notice_manager.refuse_game(request.user, asker) AskModel(asker_id=asker_id, asked_id=asked_id).delete() return Response(status=status.HTTP_200_OK) class AskAcceptView(APIView): serializer_class = AskSerializer permission_classes = (permissions.IsAuthenticated,) authentication_classes = (SessionAuthentication,) def post(self, request): data: dict = request.data asker_id = data["asker"] asked_id = request.user.pk if (asker_id is None): return Response(status=status.HTTP_400_BAD_REQUEST) if not AskModel().is_asked(asker_id, asked_id): return Response(status=status.HTTP_404_NOT_FOUND) asker = User.objects.get(pk=asker_id) asked = User.objects.get(pk=asked_id) notice_manager.accept_game(asker=asker, asked=asked) AskModel(asker_id=asker_id, asked_id=asked_id).delete() return Response(status=status.HTTP_200_OK)