diff --git a/werewolf/tailend/models.py b/werewolf/tailend/models.py index fd64bc8..6d05a7d 100644 --- a/werewolf/tailend/models.py +++ b/werewolf/tailend/models.py @@ -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"), @@ -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 - ) diff --git a/werewolf/tailend/serializers.py b/werewolf/tailend/serializers.py index 178fd6d..170b07e 100644 --- a/werewolf/tailend/serializers.py +++ b/werewolf/tailend/serializers.py @@ -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') diff --git a/werewolf/tailend/urls.py b/werewolf/tailend/urls.py index 4cc3319..74e2207 100644 --- a/werewolf/tailend/urls.py +++ b/werewolf/tailend/urls.py @@ -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')) -] \ No newline at end of file + ] diff --git a/werewolf/tailend/views.py b/werewolf/tailend/views.py index 70ce0b4..9b0d9f1 100644 --- a/werewolf/tailend/views.py +++ b/werewolf/tailend/views.py @@ -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