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 django.http import HttpRequest from django.contrib.auth import login from django.db.models import QuerySet from django.core import serializers from chat.models import AskModel from profiles.models import ProfileModel 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 if (data["asked"] == None): return asker_id = request.user.pk asked_id = data["asked"] 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 if (data["asker"] == None): return asker_id = data["asker"] asked_id = request.user.pk if not AskModel().is_asked(asker_id, asked_id): return Response(status=status.HTTP_404_NOT_FOUND) asker = User.objects.filter(pk=asked_id)[0] 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 AskAccepteView(APIView): serializer_class = AskSerializer permission_classes = (permissions.IsAuthenticated,) authentication_classes = (SessionAuthentication,) def post(self, request): data : dict = request.data if (data["asker"] == None): return asker_id = data["asker"] asked_id = request.user.pk if not AskModel().is_asked(asker_id, asked_id): return Response(status=status.HTTP_404_NOT_FOUND) notice_manager.accept_game(asker=User.objects.filter(pk=asker_id)[0], asked=User.objects.filter(pk=asked_id)[0]) AskModel(asker_id=asker_id, asked_id=asked_id).delete() return Response(status=status.HTTP_200_OK)