Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
97 changes: 63 additions & 34 deletions werewolf/tailend/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,11 +51,71 @@ def value_to_string(self, obj):
return self.get_prep_value(value)


class Game(models.Model):
class Player(models.Model):
"""Player Class.

Parameters
----------

-name: Char Field
player's name
-id: Char Field
player's id
-stage: Char Field
the stage the player is currently. There are four stages of each
round of the game
-role: Char Field
player's role
"""
Manage game state
name = models.CharField(max_length=100)
id = models.CharField(max_length=20, primary_key=True)
STAGE_CHOICES = (
("VG", "Voting"),
("VD", "Voted"),
("DD", "Dead"),
("SG", "Sleeping")
)
stage = models.CharField(
max_length=2,
choices=STAGE_CHOICES,
default="SG"
)
ROLE_CHOICES = (
("VG", "Villager"),
("WW", "Werewolf"),
("WD", "Witch Doctor"),
("GH", "Ghost"),
("CT", "Cthulu"),
("SR", "Seer")
)
role = models.CharField(
max_length=2,
choices=ROLE_CHOICES,
default=None
)


class Game(models.Model):
"""Game class.

Parameters
----------

-owner: Foreign Key
a player instance that is the game master
-player_list: ManyToManyField
a list of player instances
-status: Char Field
the status of the game. There can only be three different game status
-daynumber: Integer Field
an integer showing in which day the game is currently
-stage: Char Field
the stage can either be day or night
-history: History instance
the history of the entire game
"""
owner = models.ForeignKey("Player", related_name="games")
owner = models.ForeignKey(Player, related_name="games")
player_list = models.ManyToManyField(Player)
STATUS_CHOICES = (
("JN", "Joining"),
("ST", "Started"),
Expand All @@ -79,34 +139,3 @@ class Game(models.Model):
default="N"
)
history = HistoryField()


class Player(models.Model):
"""
Manage player state
"""
name = models.CharField(max_length=100)
STATUS_CHOICES = (
("VG", "Voting"),
("VD", "Voted"),
("DD", "Dead"),
("SG", "Sleeping")
)
status = models.CharField(
max_length=2,
choices=STATUS_CHOICES,
default="SG"
)
ROLE_CHOICES = (
("VG", "Villager"),
("WW", "Werewolf"),
("WD", "Witch Doctor"),
("GH", "Ghost"),
("CT", "Cthulu"),
("SR", "Seer")
)
role = models.CharField(
max_length=2,
choices=ROLE_CHOICES,
default=None
)
20 changes: 19 additions & 1 deletion werewolf/tailend/serializers.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,27 @@
from django.contrib.auth.models import User
from rest_framework import serializers
from .models import Game, Player


# Serializers define the API representation.
class UserSerializer(serializers.HyperlinkedModelSerializer):
"""User Serializer"""
class Meta:
model = User
fields = ('url', 'username', 'email', 'is_staff')


class PlayerSerializer(serializers.HyperlinkedModelSerializer):
"""Player Object Serializer"""
class Meta:
model = Player
fields = ('name', 'status')


class GameSerializer(serializers.HyperlinkedModelSerializer):
"""Game Object Serializer"""

player_list = PlayerSerializer(many=True)

class Meta:
model = Game
fields = ('player_list', 'status', 'daynumber', 'stage', 'history')
6 changes: 4 additions & 2 deletions werewolf/tailend/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,13 @@
from rest_framework import routers
from tailend import views

# Routers provide an easy way of automatically determining the URL conf.

router = routers.DefaultRouter()
router.register(r'users', views.UserViewSet)
router.register(r'players', views.PlayerViewSet)
router.register(r'game', views.GameViewSet)

urlpatterns = [
url(r'^', include(router.urls)),
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework'))
]
]
15 changes: 13 additions & 2 deletions werewolf/tailend/views.py
Original file line number Diff line number Diff line change
@@ -1,10 +1,21 @@
from django.contrib.auth.models import User
from rest_framework import viewsets
from .serializers import UserSerializer
from .serializers import *


# ViewSets define the view behavior.
class UserViewSet(viewsets.ModelViewSet):
"""View set for User"""
queryset = User.objects.all()
serializer_class = UserSerializer


class PlayerViewSet(viewsets.ModelViewSet):
"""View set for Player"""
queryset = Player.objects.all()
serializer_class = PlayerSerializer


class GameViewSet(viewsets.ModelViewSet):
"""View set for Game"""
queryset = Game.objects.all()
serializer_class = GameSerializer