This commit is contained in:
2024-05-14 03:30:42 +02:00
parent c91ca959f6
commit 3f1a396975
10 changed files with 161 additions and 35 deletions

View File

@ -30,3 +30,11 @@ class ChatMessageModel(models.Model):
def __str__(self):
return "author_id: " + str(self.author_id) + ", channel_id: " + str(self.channel_id) + ", content: " + self.content
class AskModel(models.Model):
asker_id = IntegerField(primary_key=False)
asked_id = IntegerField(primary_key=False)
# return if the asker ask the asked to play a game
def is_asked(self, asker_id, asked_id):
return AskModel.objects.get(asker_id=asker_id, asked_id=asked_id) != None

10
chat/serializers/ask.py Normal file
View File

@ -0,0 +1,10 @@
from rest_framework import serializers
from django.utils.translation import gettext as _
from profiles.models import ProfileModel
from ..models import ChatChannelModel, ChatMessageModel
class AskSerializer(serializers.ModelSerializer):
members_id = serializers.ListField(child=serializers.IntegerField())

View File

@ -3,8 +3,7 @@ from rest_framework import serializers
from django.utils.translation import gettext as _
from profiles.models import ProfileModel
from .models import ChatChannelModel, ChatMessageModel
from ..models import ChatChannelModel, ChatMessageModel
class ChatChannelSerializer(serializers.ModelSerializer):

View File

@ -2,8 +2,11 @@ from django.urls import path
from django.conf import settings
from django.conf.urls.static import static
from . import views
from .views import chat
from .views import ask
urlpatterns = [
path("", views.ChannelView.as_view(), name="chats_page"),
path("", chat.ChannelView.as_view(), name="chats_page"),
path("ask/", ask.AskView.as_view(), name="chats_ask"),
path("ask/accept", ask.AskAccepteView.as_view(), name="chats_ask_accept"),
]

78
chat/views/ask.py Normal file
View File

@ -0,0 +1,78 @@
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)

View File

@ -9,8 +9,8 @@ from django.db.models import QuerySet
from django.core import serializers
from .models import ChatChannelModel, ChatMemberModel, ChatMessageModel
from .serializers import ChatChannelSerializer, ChatMessageSerializer
from ..models import ChatChannelModel, ChatMemberModel, ChatMessageModel
from ..serializers.chat import ChatChannelSerializer, ChatMessageSerializer
class ChannelView(APIView):