etienne apprend à coder pitié

This commit is contained in:
AdrienLSH
2024-05-14 08:16:21 +02:00
parent c4dc5b4e39
commit e2d56cff85
9 changed files with 126 additions and 170 deletions

View File

@ -1,48 +1,31 @@
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework import permissions, status
from rest_framework import permissions
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 django.contrib.auth.models import User
from ..models import ChatChannelModel, ChatMemberModel
from ..serializers import ChatChannelSerializer
from ..models import ChatChannelModel, ChatMemberModel, ChatMessageModel
from ..serializers.chat import ChatChannelSerializer, ChatMessageSerializer
class ChannelView(APIView):
queryset = ChatChannelModel.objects
serializer_class = ChatChannelSerializer
permission_classes = (permissions.IsAuthenticated,)
authentication_classes = (SessionAuthentication,)
authentication_classes = (SessionAuthentication,)
def post(self, request):
serializer = self.serializer_class(data = request.data)
serializer = self.serializer_class(data=request.data, context={'user': request.user})
serializer.is_valid(raise_exception=True)
data: dict = serializer.validated_data
members_id = serializer.validated_data.get('members_id')
member_list = [User.objects.get(pk=member_id) for member_id in members_id]
members_id = data.get("members_id")
if members_id == None:
return Response({"detail": "members_id is None."}, status = status.HTTP_400_BAD_REQUEST)
if self.request.user.pk not in members_id:
return Response({"detail": "You are trying to create a chat group without you."}, status = status.HTTP_400_BAD_REQUEST)
for member_channel in ChatMemberModel.objects.filter(member_id = members_id[0]):
channel_id: int = member_channel.channel_id
if not ChatChannelModel.objects.filter(pk = channel_id).exists():
continue
channel: ChatChannelModel = ChatChannelModel.objects.get(pk = channel_id)
if set(channel.get_members_id()) == set(members_id):
messages = ChatMessageModel.objects.filter(channel_id = channel_id).order_by("time")
messages = serializers.serialize("json", messages)
return Response({'channel_id': channel_id, 'messages': messages}, status=status.HTTP_200_OK)
new_channel_id = ChatChannelModel().create(members_id)
return Response({'channel_id': new_channel_id}, status=status.HTTP_201_CREATED)
for member_channel in ChatMemberModel.objects.filter(member=member_list[0]):
channel: ChatChannelModel = member_channel.channel
if set(channel.get_members()) == set(member_list):
break
else:
channel = ChatChannelModel().create(member_list)
return Response(self.serializer_class(channel).data)