42_ft_transcendence/django/chat/views/ask.py
2024-05-14 08:50:37 +02:00

75 lines
2.2 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 ..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"] is 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"] is 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 AskAcceptView(APIView):
serializer_class = AskSerializer
permission_classes = (permissions.IsAuthenticated,)
authentication_classes = (SessionAuthentication,)
def post(self, request):
data: dict = request.data
if (data["asker"] is 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)