42_ft_transcendence/django/chat/views/ask.py

99 lines
2.9 KiB
Python

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 games.models import GameModel
from notice.consumers import notice_manager
from django.contrib.auth.models import User
class AskView(APIView):
permission_classes = (permissions.IsAuthenticated,)
authentication_classes = (SessionAuthentication,)
def post(self, request):
data: dict = request.data
asker_id = request.user.pk
asked_id = data.get("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)
asked = User.objects.get(pk=asked_id)
notice_manager.ask_game(asked, request.user.username)
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.get("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_204_NO_CONTENT)
# Don't need more verification, just above is enough
asker = User.objects.get(pk=asker_id)
notice_manager.refuse_game(asker, request.user.username)
AskModel.objects.get(asker_id=asker_id, asked_id=asked_id).delete()
return Response(status=status.HTTP_200_OK)
def get(self, request, pk=None):
data: dict = request.data
asker_id = request.user.pk
asked_id = pk
if (asked_id is None):
return Response(status=status.HTTP_400_BAD_REQUEST)
if not AskModel().is_asked(asked_id, asker_id):
return Response(status=status.HTTP_204_NO_CONTENT)
return Response(status=status.HTTP_200_OK)
class AskAcceptView(APIView):
permission_classes = (permissions.IsAuthenticated,)
authentication_classes = (SessionAuthentication,)
def post(self, request):
data: dict = request.data
asker_id = data.get("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_400_BAD_REQUEST)
asker = User.objects.get(pk=asker_id)
asked = request.user
id_game = GameModel(game_type="pong").create([asker, asked]).pk
notice_manager.accept_game(asker, request.user.username, id_game)
AskModel.objects.get(asker_id=asker_id, asked_id=asked_id).delete()
return Response({"id_game":id_game}, status=status.HTTP_200_OK)