mirror of
https://github.com/Rushilwiz/house-party.git
synced 2025-04-27 23:09:51 -04:00
124 lines
5.3 KiB
Python
124 lines
5.3 KiB
Python
from django.shortcuts import render
|
|
from django.http import JsonResponse
|
|
from rest_framework.views import APIView
|
|
from rest_framework.generics import ListAPIView
|
|
from rest_framework import status
|
|
from rest_framework.response import Response
|
|
from .serializers import RoomSerializer, CreateRoomSerializer, UpdateRoomSerializer
|
|
from .models import Room
|
|
|
|
# Create your views here.
|
|
|
|
class RoomView(ListAPIView):
|
|
queryset = Room.objects.all()
|
|
serializer_class = RoomSerializer
|
|
|
|
class GetRoom(APIView):
|
|
serializer_class = RoomSerializer
|
|
lookup_url_kwarg = 'code'
|
|
|
|
def get(self, request, format=None):
|
|
code = request.GET.get(self.lookup_url_kwarg)
|
|
if code != None:
|
|
room = Room.objects.filter(code=code)
|
|
if room.exists():
|
|
data = RoomSerializer(room[0]).data
|
|
data['is_host'] = self.request.session.session_key == room[0].host
|
|
return Response(data, status=status.HTTP_200_OK)
|
|
else:
|
|
return Response({'Room Not Found': 'Invalid Room Code.'}, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
class JoinRoom(APIView):
|
|
lookup_url_kwarg = 'code'
|
|
|
|
def post(self, request, format=None):
|
|
if not self.request.session.exists(self.request.session.session_key):
|
|
self.request.session.create()
|
|
|
|
code = request.data.get(self.lookup_url_kwarg)
|
|
if code != None:
|
|
room_set = Room.objects.filter(code=code)
|
|
if room_set.exists():
|
|
room = room_set[0]
|
|
self.request.session['code'] = code
|
|
return Response({'message': 'Room Joined.'}, status=status.HTTP_200_OK)
|
|
else:
|
|
return Response({'Bad Request': 'Invalid room code'}, status=status.HTTP_400_BAD_REQUEST)
|
|
else:
|
|
return Response({'Bad Request': 'Invalid data, did not find code'}, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
class LeaveRoom(APIView):
|
|
def patch(self, request, format=None):
|
|
if 'code' in self.request.session:
|
|
self.request.session.pop('code')
|
|
host = self.request.session.session_key
|
|
room_set = Room.objects.filter(host=host)
|
|
if room_set.exists():
|
|
room = room_set[0]
|
|
room.delete()
|
|
|
|
return Response({'message': 'Success'}, status=status.HTTP_200_OK)
|
|
|
|
class CreateRoomView(APIView):
|
|
serializer_class = CreateRoomSerializer
|
|
|
|
def post(self, request, format=None):
|
|
if not self.request.session.exists(self.request.session.session_key):
|
|
self.request.session.create()
|
|
|
|
serializer = self.serializer_class(data=request.data)
|
|
if serializer.is_valid():
|
|
guest_can_pause = serializer.data.get("guest_can_pause")
|
|
votes_to_skip = serializer.data.get("votes_to_skip")
|
|
host = self.request.session.session_key
|
|
queryset = Room.objects.filter(host=host)
|
|
if queryset.exists():
|
|
room = queryset[0]
|
|
room.guest_can_pause = guest_can_pause
|
|
room.votes_to_skip = votes_to_skip
|
|
room.save(update_fields=['guest_can_pause', 'votes_to_skip'])
|
|
self.request.session['code'] = room.code
|
|
return Response(RoomSerializer(room).data, status=status.HTTP_200_OK)
|
|
else:
|
|
room = Room(host=host, guest_can_pause=guest_can_pause, votes_to_skip=votes_to_skip)
|
|
room.save()
|
|
self.request.session['code'] = room.code
|
|
return Response(RoomSerializer(room).data, status=status.HTTP_201_CREATED)
|
|
else:
|
|
return Response({'Bad Request': 'Invalid data...'}, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
class UpdateRoomView(APIView):
|
|
serializer_class = UpdateRoomSerializer
|
|
def patch(self, request, format=None):
|
|
serializer = self.serializer_class(data=request.data)
|
|
if serializer.is_valid():
|
|
guest_can_pause = serializer.data.get('guest_can_pause')
|
|
votes_to_skip = serializer.data.get('votes_to_skip')
|
|
code = serializer.data.get('code')
|
|
|
|
room_set = Room.objects.filter(code=code)
|
|
if room_set.exists():
|
|
room = room_set[0]
|
|
user_id = self.request.session.session_key
|
|
if room.host != user_id:
|
|
return Response({'message': 'You are not the host of this room.'}, status = status.HTTP_403_FORBIDDEN)
|
|
|
|
room.guest_can_pause = guest_can_pause
|
|
room.votes_to_skip = votes_to_skip
|
|
room.code = code
|
|
room.save(update_fields=['guest_can_pause', 'votes_to_skip'])
|
|
return Response(RoomSerializer(room).data, status=status.HTTP_200_OK)
|
|
else:
|
|
return Response({'Bad Request': 'No room was found'}, status=status.HTTP_404_NOT_FOUND)
|
|
|
|
return Response({'Bad Request': 'Invalid data'}, status=status.HTTP_400_BAD_REQUEST)
|
|
|
|
|
|
class UserDetails(APIView):
|
|
def get(self, request, format=None):
|
|
if not self.request.session.exists(self.request.session.session_key):
|
|
self.request.session.create()
|
|
data = {
|
|
'code': self.request.session.get('code')
|
|
}
|
|
return JsonResponse(data, status=status.HTTP_200_OK) |