From c80dc93447ffa6c868d0f96157e58802f3c16da4 Mon Sep 17 00:00:00 2001 From: Michel Wilhelm Date: Fri, 6 Nov 2020 01:44:34 -0300 Subject: [PATCH] GameEvent listing endpoint --- api/resources/game.py | 8 +++++++- game/__init__.py | 1 + game/apps.py | 3 +++ game/migrations/0003_gameevent.py | 4 ++-- game/models.py | 1 + game/signals.py | 11 +++++++++++ 6 files changed, 25 insertions(+), 3 deletions(-) diff --git a/api/resources/game.py b/api/resources/game.py index 0555f09..3cc1b64 100644 --- a/api/resources/game.py +++ b/api/resources/game.py @@ -2,7 +2,7 @@ from rest_framework import status from rest_framework.response import Response from rest_framework.views import APIView -from game.models import Game +from game.models import Game, GameEvent from ..serializers import GameSerializer, GameEventSerializer @@ -31,6 +31,12 @@ class GameSingleResource(APIView): class GameEventResource(APIView): + def get(self, request, game_id): + """ Returns a list of all game events """ + events = GameEvent.objects.filter(game_id=game_id) + serializer = GameEventSerializer(events, many=True) + return Response(serializer.data) + def post(self, request, game_id): """ Creates a new event """ diff --git a/game/__init__.py b/game/__init__.py index e69de29..6d8f478 100644 --- a/game/__init__.py +++ b/game/__init__.py @@ -0,0 +1 @@ +default_app_config = "game.apps.GameConfig" diff --git a/game/apps.py b/game/apps.py index 6198c24..d056f90 100644 --- a/game/apps.py +++ b/game/apps.py @@ -5,3 +5,6 @@ class GameConfig(AppConfig): name = "game" verbose_name = "Game" verbose_name_plural = "Games" + + def ready(self): + import game.signals # noqa diff --git a/game/migrations/0003_gameevent.py b/game/migrations/0003_gameevent.py index e0fd74b..14cfeae 100644 --- a/game/migrations/0003_gameevent.py +++ b/game/migrations/0003_gameevent.py @@ -36,7 +36,7 @@ class Migration(migrations.Migration): "type", models.IntegerField( choices=[ - (0, "CREATE_GAME"), + (0, "START_GAME"), (1, "PAUSE"), (2, "RESUME"), (3, "CLICK_MINE"), @@ -45,7 +45,7 @@ class Migration(migrations.Migration): (6, "CLICK_FLAG"), (7, "GAME_OVER"), ], - default=game.models.EventTypes["CREATE_GAME"], + default=game.models.EventTypes["START_GAME"], help_text="The game event", ), ), diff --git a/game/models.py b/game/models.py index 2c05314..41b55a1 100644 --- a/game/models.py +++ b/game/models.py @@ -97,6 +97,7 @@ class GameEvent(models.Model): ) class Meta: + ordering = ["created_at"] verbose_name = "Game event" verbose_name_plural = "Game events" db_table = "game_events" diff --git a/game/signals.py b/game/signals.py index e69de29..b846395 100644 --- a/game/signals.py +++ b/game/signals.py @@ -0,0 +1,11 @@ +from django.db.models.signals import post_save +from django.dispatch import receiver + +from .models import Game, GameEvent, EventTypes + + +@receiver(post_save, sender=Game) +def game_start(sender, signal, instance, **kwargs): + """ If the game was just created, insert the first event START_GAME """ + + GameEvent.objects.get_or_create(game=instance, type=EventTypes.START_GAME)