158 lines
6.6 KiB
Python
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)
|