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.core import serializers from django.utils.translation import gettext as _ from .models import BlockModel, FriendModel class BlocksView(APIView): permission_classes = (permissions.IsAuthenticated,) authentication_classes = (SessionAuthentication,) def get(self, request): blocked_profiles = BlockModel.objects.filter(blocker=request.user.pk) response_status: int = status.HTTP_204_NO_CONTENT if blocked_profiles else status.HTTP_204_NO_CONTENT return Response(serializers.serialize("json", blocked_profiles), response_status) def post(self, request, pk=None): if (pk == request.user.pk): return Response(_('You can\'t block yourself.'), status.HTTP_400_BAD_REQUEST) if (BlockModel.objects.filter(blocker=request.user.pk, blocked=pk)): return Response(_('You already blocked this user.'), status=status.HTTP_409_CONFLICT) BlockModel(blocker=request.user.pk, blocked=pk).save() return Response(status=status.HTTP_201_CREATED) def delete(self, request): data: dict = request.data users_id = request.data.get("users_id", None) if (users_id == None): return Response({"Error"}, status=status.HTTP_400_BAD_REQUEST) if (users_id[0] == None or users_id[1] == None): return Response({"Error send blocker/ed None"}, status=status.HTTP_400_BAD_REQUEST) block = BlockModel.objects.filter(blocker=users_id[0], blocked=users_id[1]) if (block.count() > 1): return Response("Not normal >:[", status=status.HTTP_500_INTERNAL_SERVER_ERROR) if (not block): return Response("Don't exist", status=status.HTTP_404_NOT_FOUND) block.delete() return Response("Deleted", status=status.HTTP_200_OK) class FriendsView(APIView): permission_classes = (permissions.IsAuthenticated,) authentication_classes = (SessionAuthentication,) def get(self, request): friends = FriendModel().getFriends(request.user.pk) if (friends): return Response({"friends": friends, "user_id": request.user.pk}, status=status.HTTP_200_OK) return Response({}, status=status.HTTP_204_NO_CONTENT)