158 lines
6.6 KiB
Python

from django.shortcuts import render
from settings.puckoviews import PuckoView, PuckoPaginatedView, PuckoSearchView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from settings.puckolizers import Message_Serializer
from user_profile.models import User_Profile
from user_profile.models import Friend_Request
from user_profile.serializer import Friend_Request_Serializer
from user_profile.serializer import User_Profile_Small_Serializer
from user_profile.serializer import User_Profile_Serializer
from user_profile.serializer import My_Profile_Serializer
from user_profile.serializer import User_Searchalizer
class My_Profile_View(PuckoView):
permission_classes = [IsAuthenticated,]
serializer_class = My_Profile_Serializer
model_class = User_Profile
def my_profile(self, request):
profile = request.user.profile
serializer = self.serializer_class(profile)
return Response(serializer.data, status=200)
def update(self, request):
obj = request.user.profile
serializer = self.serializer_class(obj, data=request.data, partial=False)
if serializer.is_valid(raise_exception=True):
serializer.save()
return Response(serializer.data, status=201)
return Response(serializer.errors, status=400)
def update_partial(self, request):
obj = request.user.profile
serializer = self.serializer_class(obj, data=request.data, partial=True)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=201)
return Response(serializer.errors, status=400)
class My_Friends_View(PuckoPaginatedView):
permission_classes = (IsAuthenticated,)
serializer_class = User_Profile_Small_Serializer
model_class = User_Profile
def get_queryset(self, request=None):
return request.user.profile.friends.all()
class User_Search_View(PuckoSearchView):
permission_classes = [IsAuthenticated,]
serializer_class = User_Searchalizer
model_class = User_Profile
def get_object(self, data):
try:
ret = self.model_class.search_for(query=data["search"])
except Exception:
ret = None
return ret
class User_Profile_View(PuckoView):
permission_classes = [IsAuthenticated,]
serializer_class = User_Profile_Serializer
model_class = User_Profile
def profile(self, request, slug):
try:
obj = User_Profile.objects.get(slug=slug)
except:
serializer = Message_Serializer({"message": "user not found"})
return Response(serializer.data, status=404)
serializer = self.serializer_class(obj, many=False)
return Response(serializer.data, status=200)
class Send_Friend_Request_View(PuckoView):
permission_classes = [IsAuthenticated,]
serializer_class = Message_Serializer
model_class = Friend_Request
def send(self, request, slug):
user = request.user.profile
try:
friend = User_Profile.objects.get(slug=slug)
except Exception:
serializer = Message_Serializer({"message": "user not found"})
return Response(serializer.data, status=404)
if friend == user:
serializer = Message_Serializer({"message": "no need to befriend yourself, duuh"})
else:
serializer = self.serializer_class({"message": user.friend_request_send(friend)})
return Response(serializer.data, status=200)
class Friend_Requests_Sent_View(PuckoPaginatedView):
permission_classes = (IsAuthenticated,)
serializer_class = Friend_Request_Serializer
model_class = Friend_Request
def get_queryset(self, request=None):
return request.user.profile.friend_requests_sent.all()
class Friend_Request_Recieved_Slug_View(PuckoView):
permission_classes = (IsAuthenticated,)
serializer_class = Message_Serializer
model_class = User_Profile
def deny(self, request, friend_request_id):
"""Deny a friend request
"""
if not Friend_Request.objects.filter(pk=friend_request_id, to_user=request.user.profile.pk).exists():
serializer = self.serializer_class({"message": "Unknown friend request."})
return Response(serializer.data, status=404)
req = Friend_Request.objects.get(pk=friend_request_id)
message = f"friend request from {req.from_user} have been denied."
if request.user.profile.friend_request_deny(friend_request_id):
serializer = self.serializer_class({"message": "Could not deny friend request."})
return Response(serializer.data, status=403)
serializer = self.serializer_class({"message": message})
return Response(serializer.data, status=204)
def accept(self, request, friend_request_id):
"""Accept a friend request
"""
if not Friend_Request.objects.filter(pk=friend_request_id, to_user=request.user.profile.pk).exists():
serializer = self.serializer_class({"message": "Unknown friend request."})
return Response(serializer.data, status=404)
new_friend = Friend_Request.objects.get(pk=friend_request_id, to_user=request.user.profile.pk).from_user
if request.user.profile.friend_request_accept(friend_request_id):
serializer = self.serializer_class({"message": "Could not accept friend request."})
return Response(serializer.data, status=403)
return Response({"message": f"You are now friends with {new_friend.nickname}"}, status=200)
class Friend_Requests_Recieved_View(PuckoPaginatedView):
permission_classes = (IsAuthenticated,)
serializer_class = Friend_Request_Serializer
model_class = Friend_Request
def get_queryset(self, request=None):
return request.user.profile.friend_requests_recieved.all()
class Friend_Request_Sent_Slug_View(PuckoView):
permission_classes = (IsAuthenticated,)
serializer_class = Message_Serializer
model_class = User_Profile
def destroy(self, request, friend_request_id):
"""Delete a sent friend request
"""
if not Friend_Request.objects.filter(pk=friend_request_id, from_user=request.user.profile.pk).exists():
serializer = self.serializer_class({"message": "Unknown friend request."})
return Response(serializer.data, status=404)
req = Friend_Request.objects.get(pk=friend_request_id)
message = f"friend request to {req.to_user} have been removed."
req.delete()
serializer = self.serializer_class({"message": message})
return Response(serializer.data, status=204)