Skip to content

Commit

Permalink
Merge pull request #1 from InahoAZ/develop
Browse files Browse the repository at this point in the history
Merge Initial Frontend with React to Main
  • Loading branch information
InahoAZ authored Apr 10, 2021
2 parents 58a93fa + 2ef455a commit 921017c
Show file tree
Hide file tree
Showing 30 changed files with 4,606 additions and 18 deletions.
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -113,4 +113,7 @@ GitHub.sublime-settings
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
.history
.history

#node modules
node_modules/
25 changes: 25 additions & 0 deletions playroom_backend/api/migrations/0001_initial.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Generated by Django 3.1.7 on 2021-03-22 23:51

from django.db import migrations, models


class Migration(migrations.Migration):

initial = True

dependencies = [
]

operations = [
migrations.CreateModel(
name='Room',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('code', models.CharField(default='', max_length=8, unique=True)),
('host', models.CharField(max_length=50, unique=True)),
('guest_can_pause', models.BooleanField(default=False)),
('votes_to_skip', models.IntegerField(default=1)),
('created_at', models.DateTimeField(auto_now_add=True)),
],
),
]
18 changes: 18 additions & 0 deletions playroom_backend/api/models.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,21 @@
from django.db import models
import string
import random

def generate_unique_code():
length = 6
while True:
code = ''.join(random.choices(string.ascii_uppercase, k=length))
if Room.objects.filter(code=code).count() == 0:
break
return code


# Create your models here.
class Room(models.Model):
code = models.CharField(max_length=8, default=generate_unique_code, unique=True)
host = models.CharField(max_length=50, unique=True)
guest_can_pause = models.BooleanField(null=False, default=False)
votes_to_skip = models.IntegerField(null=False, default=1)
created_at = models.DateTimeField(auto_now_add=True)

14 changes: 14 additions & 0 deletions playroom_backend/api/serializers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from rest_framework import serializers
from .models import Room

class RoomSerializer(serializers.ModelSerializer):
class Meta:
model = Room
fields = ('id', 'code', 'host', 'guest_can_pause',
'votes_to_skip', 'created_at')


class CreateRoomSerializer(serializers.ModelSerializer):
class Meta:
model = Room
fields = ('guest_can_pause', 'votes_to_skip')
10 changes: 10 additions & 0 deletions playroom_backend/api/urls.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
from django.urls import path, include
from .views import RoomView, CreateRoomView, GetRoom, JoinRoom

urlpatterns = [
path('room', RoomView.as_view()),
path('create-room', CreateRoomView.as_view()),
path('get-room', GetRoom.as_view()),
path('join-room', JoinRoom.as_view()),

]
70 changes: 69 additions & 1 deletion playroom_backend/api/views.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,71 @@
from django.shortcuts import render

from rest_framework import generics, status
from .models import Room
from .serializers import RoomSerializer, CreateRoomSerializer
from rest_framework.views import APIView
from rest_framework.response import Response
# Create your views here.

class RoomView(generics.ListAPIView):
queryset = Room.objects.all()
serializer_class = RoomSerializer

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'])
else:
room = Room(host=host, guest_can_pause=guest_can_pause, votes_to_skip=votes_to_skip)
room.save()

return Response(RoomSerializer(room).data, status=status.HTTP_201_CREATED)


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 len(room) > 0:
data = RoomSerializer(room[0]).data
data['is_host'] = self.request.session.session_key == room[0].host
return Response(data, status=status.HTTP_200_OK)
return Response({'Room not found': 'Invalid Room Code.'}, status=status.HTTP_404_NOT_FOUND)

return Response({'Bad Request': 'Code parameter not found in request'}, status=status.HTTP_400_BAD_REQUEST)

class JoinRoom(APIView):
lookup_url_kwarg = 'room_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)
print(code)

if code != None:
room_result = Room.objects.filter(code=code)
if len(room_result) > 0:
room = room_result[0]
self.request.session['room_code'] = code
return Response({'Message': 'Room Joined!'}, status=status.HTTP_200_OK)
return Response({'Room not Found': 'Invalid Room Code'}, status=status.HTTP_404_NOT_FOUND)
return Response({'Bad Request' : 'Code parameter not found in request'}, status=status.HTTP_400_BAD_REQUEST)
Empty file.
3 changes: 3 additions & 0 deletions playroom_backend/frontend/admin.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.contrib import admin

# Register your models here.
5 changes: 5 additions & 0 deletions playroom_backend/frontend/apps.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
from django.apps import AppConfig


class FrontendConfig(AppConfig):
name = 'frontend'
14 changes: 14 additions & 0 deletions playroom_backend/frontend/babel.config.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"node": "10"
}
}
],
"@babel/preset-react"
],
"plugins": ["@babel/plugin-proposal-class-properties"]
}
Empty file.
3 changes: 3 additions & 0 deletions playroom_backend/frontend/models.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from django.db import models

# Create your models here.
Loading

0 comments on commit 921017c

Please sign in to comment.