From 54c59431802d2776a9307a0e8367e52526ec0269 Mon Sep 17 00:00:00 2001 From: Xamora Date: Tue, 14 May 2024 09:48:25 +0200 Subject: [PATCH] In progress --- django/chat/models.py | 2 +- django/chat/serializers/ask.py | 10 --------- django/chat/views/ask.py | 27 ++++++++++++++++------- django/frontend/static/js/api/Notice.js | 12 ++++++++-- django/frontend/static/js/api/chat/Ask.js | 16 +++++++++----- 5 files changed, 41 insertions(+), 26 deletions(-) delete mode 100644 django/chat/serializers/ask.py diff --git a/django/chat/models.py b/django/chat/models.py index 0392179..0d3d402 100644 --- a/django/chat/models.py +++ b/django/chat/models.py @@ -38,4 +38,4 @@ class AskModel(Model): # 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) is not None + return AskModel.objects.filter(asker_id=asker_id, asked_id=asked_id).first() is not None diff --git a/django/chat/serializers/ask.py b/django/chat/serializers/ask.py deleted file mode 100644 index 5efeb57..0000000 --- a/django/chat/serializers/ask.py +++ /dev/null @@ -1,10 +0,0 @@ -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()) diff --git a/django/chat/views/ask.py b/django/chat/views/ask.py index e5ca386..bb5a4c4 100644 --- a/django/chat/views/ask.py +++ b/django/chat/views/ask.py @@ -20,12 +20,13 @@ class AskView(APIView): def post(self, request): data: dict = request.data - if (data["asked"] is None): - return asker_id = request.user.pk asked_id = data["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) @@ -34,16 +35,22 @@ class AskView(APIView): def delete(self, request): data: dict = request.data - if (data["asker"] is None): - return asker_id = data["asker"] asked_id = request.user.pk + if (asker_id is None): + asker_id = request.user.id + asked_id = data["asked"] + if (asked_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_404_NOT_FOUND) - asker = User.objects.filter(pk=asked_id)[0] + # Don't need more verification, just above is enough + asker = User.objects.get(pk=asker_id) + notice_manager.refuse_game(request.user, asker) AskModel(asker_id=asker_id, asked_id=asked_id).delete() @@ -59,16 +66,20 @@ class AskAcceptView(APIView): def post(self, request): data: dict = request.data - if (data["asker"] is None): - return asker_id = data["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_404_NOT_FOUND) - notice_manager.accept_game(asker=User.objects.filter(pk=asker_id)[0], asked=User.objects.filter(pk=asked_id)[0]) + asker = User.objects.get(pk=asker_id) + asked = User.objects.get(pk=asked_id) + + notice_manager.accept_game(asker=asker, asked=asked) AskModel(asker_id=asker_id, asked_id=asked_id).delete() return Response(status=status.HTTP_200_OK) diff --git a/django/frontend/static/js/api/Notice.js b/django/frontend/static/js/api/Notice.js index 5b78ac9..3cdbb8e 100644 --- a/django/frontend/static/js/api/Notice.js +++ b/django/frontend/static/js/api/Notice.js @@ -23,7 +23,7 @@ export default class Notice { this._socket.onclose = _ => this._socket = undefined; this._socket.onmessage = message => { const data = JSON.parse(message.data); - //console.log(data) + console.log(data) if (data.type === 'friend_request') { this.friend_request(data.author); @@ -37,7 +37,15 @@ export default class Notice { this.online(data.user) } else if (data.type === 'offline') { this.offline(data.user) - } + } else if (data.type == 'game_asked') { + + } else if (data.type == 'game_canceled') { + + } else if (data.type == 'game_accepted') { + + } else if (data.type == 'game_refused') { + + } }; } diff --git a/django/frontend/static/js/api/chat/Ask.js b/django/frontend/static/js/api/chat/Ask.js index 7c1831f..fb4c4ae 100644 --- a/django/frontend/static/js/api/chat/Ask.js +++ b/django/frontend/static/js/api/chat/Ask.js @@ -5,18 +5,24 @@ class Ask { } async ask_game(asked) { - response = await this.client._post(`/api/chat/ask/`); + response = await this.client._post(`/api/chat/ask/`, { + asked:asked, + }); } async ask_game_canceled() { } - async ask_game_accepted() { - + async ask_game_accepted(asker) { + response = await this.client._post(`/api/chat/ask/accept`, { + asker:asker, + }); } - async ask_game_refused() { - + async ask_game_refused(asker) { + response = await this.client._delete(`/api/chat/ask/`, { + asker:asker, + }); } }