42_ft_transcendence/chat/views/ask.py
2024-05-14 03:30:42 +02:00

79 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 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)