From ea22ef837132ee7fa0bbb156aa15a191ce2d6160 Mon Sep 17 00:00:00 2001 From: bytesparallel Date: Wed, 9 Feb 2022 15:56:52 -0600 Subject: [PATCH 1/4] saving progress on ch 8 --- levelupapi/models/game.py | 3 ++- levelupapi/views/events.py | 19 +++++++++++++++++++ levelupapi/views/games.py | 27 ++++++++++++++++++++++++--- 3 files changed, 45 insertions(+), 4 deletions(-) diff --git a/levelupapi/models/game.py b/levelupapi/models/game.py index a4b7c86..d2bb43b 100644 --- a/levelupapi/models/game.py +++ b/levelupapi/models/game.py @@ -10,4 +10,5 @@ class Game(models.Model): maker = models.CharField(max_length=256) gamer = models.ForeignKey(Gamer, on_delete=models.DO_NOTHING) number_of_players = models.IntegerField() - skill_level = models.IntegerField() \ No newline at end of file + skill_level = models.IntegerField() + diff --git a/levelupapi/views/events.py b/levelupapi/views/events.py index d3a53d1..08c9331 100644 --- a/levelupapi/views/events.py +++ b/levelupapi/views/events.py @@ -37,6 +37,25 @@ class EventView(ViewSet): events = events.filter(game_id=game) serializer = EventSerializer(events, many=True) return Response(serializer.data) + # confused as to why I'm getting a 500 error on this. An article seems to indicate that I may need to nest more of my data inside another JSON object, if for example, it has foreign keys with additional data. https://stackoverflow.com/questions/60279456/django-postman-error-this-field-is-required + def create(self, request): + """Handle POST operations + + Returns + Response -- JSON serialized game instance + """ + event = Event.objects.get(user=request.auth.user) + event_type = Event.objects.get(pk=request.data["description"]) + + event = Event.objects.create( + description=request.data["description"], + date=request.data["date"], + time=request.data["time"], + game_id=request.data["game_id"], + organizer_id=request.data["organizer_id"] + ) + serializer = EventSerializer(event) + return Response(serializer.data) class EventSerializer(serializers.ModelSerializer): """JSON serializer for event types diff --git a/levelupapi/views/games.py b/levelupapi/views/games.py index 72c1b9a..6604d8e 100644 --- a/levelupapi/views/games.py +++ b/levelupapi/views/games.py @@ -2,7 +2,7 @@ from django.http import HttpResponseServerError from rest_framework.viewsets import ViewSet from rest_framework.response import Response from rest_framework import serializers, status -from levelupapi.models import Game +from levelupapi.models import Game, Gamer, GameType class GameView(ViewSet): """Level up game s view""" @@ -34,14 +34,35 @@ class GameView(ViewSet): game_ = request.query_params.get('type', None) games = Game.objects.all() if game_ is not None: - games = games.filter(game_type_id=game_) + games = games.filter(game_type_id=game_) serializer = GameSerializer(games, many=True) return Response(serializer.data) + def create(self, request): + """Handle POST operations + + Returns + Response -- JSON serialized game instance + """ + gamer = Gamer.objects.get(user=request.auth.user) + game_type = GameType.objects.get(pk=request.data["game_type"]) + + game = Game.objects.create( + title=request.data["title"], + maker=request.data["maker"], + number_of_players=request.data["number_of_players"], + skill_level=request.data["skill_level"], + gamer=gamer, + game_type=game_type + ) + serializer = GameSerializer(game) + return Response(serializer.data) + class GameSerializer(serializers.ModelSerializer): """JSON serializer for game s """ class Meta: model = Game fields = ('id', 'title', 'maker', 'number_of_players', 'skill_level', 'game_type_id', 'gamer_id') - depth = 1 \ No newline at end of file + depth = 1 + \ No newline at end of file -- 2.47.3 From db4a08e89e030bb7ed731ea19fdfd3d42ba78f47 Mon Sep 17 00:00:00 2001 From: bytesparallel Date: Wed, 9 Feb 2022 16:24:42 -0600 Subject: [PATCH 2/4] saving results --- levelupapi/views/events.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/levelupapi/views/events.py b/levelupapi/views/events.py index 08c9331..32b3aa0 100644 --- a/levelupapi/views/events.py +++ b/levelupapi/views/events.py @@ -2,7 +2,8 @@ from django.http import HttpResponseServerError from rest_framework.viewsets import ViewSet from rest_framework.response import Response from rest_framework import serializers, status -from levelupapi.models import Event +from levelupapi.models import Event, Game +from levelupapi.models.gamer import Gamer class EventView(ViewSet): """Level up event types view""" @@ -44,15 +45,15 @@ class EventView(ViewSet): Returns Response -- JSON serialized game instance """ - event = Event.objects.get(user=request.auth.user) - event_type = Event.objects.get(pk=request.data["description"]) + organizer = Gamer.objects.get(user=request.auth.user) + game = Game.objects.get(pk=request.data["game_id"]) event = Event.objects.create( description=request.data["description"], date=request.data["date"], time=request.data["time"], - game_id=request.data["game_id"], - organizer_id=request.data["organizer_id"] + game_id=game.id, + organizer_id= organizer.id ) serializer = EventSerializer(event) return Response(serializer.data) -- 2.47.3 From 25776bc59bad96fea1a51c44c8a3a089d2c81165 Mon Sep 17 00:00:00 2001 From: bytesparallel Date: Thu, 17 Feb 2022 21:54:17 -0600 Subject: [PATCH 3/4] save work for feb 17 --- levelup/urls.py | 3 +-- levelupapi/db.sql | 8 +++++++- levelupapi/views/events.py | 21 ++++++++++++++++++--- levelupapi/views/game_type.py | 4 +--- levelupapi/views/games.py | 27 ++++++++++++++++++++++++--- 5 files changed, 51 insertions(+), 12 deletions(-) diff --git a/levelup/urls.py b/levelup/urls.py index 7c65d8c..42571f6 100644 --- a/levelup/urls.py +++ b/levelup/urls.py @@ -35,5 +35,4 @@ urlpatterns = [ path('admin/', admin.site.urls), -] - +] \ No newline at end of file diff --git a/levelupapi/db.sql b/levelupapi/db.sql index 15c11a2..ac3d9bc 100644 --- a/levelupapi/db.sql +++ b/levelupapi/db.sql @@ -1,2 +1,8 @@ UPDATE levelupapi_game SET game_type_id = 3 -WHERE title = 'World of Warcraft'; \ No newline at end of file +WHERE title = 'World of Warcraft'; + +SELECT * FROM levelupapi_gamer +WHERE levelupapi_gamer.id = auth_user.id; + +INSERT INTO levelupapi_event ('description', 'date', 'time', 'game_id', 'organizer_id') +VALUES \ No newline at end of file diff --git a/levelupapi/views/events.py b/levelupapi/views/events.py index 32b3aa0..7550a48 100644 --- a/levelupapi/views/events.py +++ b/levelupapi/views/events.py @@ -46,22 +46,37 @@ class EventView(ViewSet): Response -- JSON serialized game instance """ organizer = Gamer.objects.get(user=request.auth.user) - game = Game.objects.get(pk=request.data["game_id"]) + event = Event.objects.get(pk=request.data["event_id"]) event = Event.objects.create( description=request.data["description"], date=request.data["date"], time=request.data["time"], - game_id=game.id, + game_id=event.id, organizer_id= organizer.id ) serializer = EventSerializer(event) return Response(serializer.data) + def update(self, request, pk): + """Handle PUT requests for a game + + Returns: + Response -- Empty body with 204 status code + """ + + event = Event.objects.get(pk=pk) + event.description = request.data["description"] + event.time = request.data["time"] + event.game_id = request.data["game_id"] + event.organizer_id = request.data["organizer_id"] + event.save() + + return Response(None, status=status.HTTP_204_NO_CONTENT) class EventSerializer(serializers.ModelSerializer): """JSON serializer for event types """ class Meta: model = Event - fields = ('id', 'description', 'date', 'time', 'game_id', 'organizer_id') + fields = ('id', 'description', 'date', 'time', 'game', 'organizer_id') depth = 2 \ No newline at end of file diff --git a/levelupapi/views/game_type.py b/levelupapi/views/game_type.py index add2d19..45c5b4a 100644 --- a/levelupapi/views/game_type.py +++ b/levelupapi/views/game_type.py @@ -31,10 +31,8 @@ class GameTypeView(ViewSet): Returns: Response -- JSON serialized list of game types """ - label = request.query_params.get('label', None) + game_types = GameType.objects.all() - if label is not NONE: - game_types = game_types.filter(label=label) serializer = GameTypeSerializer(game_types, many=True) return Response(serializer.data) diff --git a/levelupapi/views/games.py b/levelupapi/views/games.py index 6604d8e..3546014 100644 --- a/levelupapi/views/games.py +++ b/levelupapi/views/games.py @@ -57,12 +57,33 @@ class GameView(ViewSet): ) serializer = GameSerializer(game) return Response(serializer.data) - + + def update(self, request, pk): + """Handle PUT requests for a game + + Returns: + Response -- Empty body with 204 status code + """ + + game = Game.objects.get(pk=pk) + game.title = request.data["title"] + game.maker = request.data["maker"] + game.number_of_players = request.data["number_of_players"] + game.skill_level = request.data["skill_level"] + + game_type = GameType.objects.get(pk=request.data["game_type"]) + game.game_type = game_type + game.save() + + return Response(None, status=status.HTTP_204_NO_CONTENT) + class GameSerializer(serializers.ModelSerializer): """JSON serializer for game s """ class Meta: model = Game - fields = ('id', 'title', 'maker', 'number_of_players', 'skill_level', 'game_type_id', 'gamer_id') - depth = 1 + fields = ('id', 'title', 'maker', 'number_of_players', 'skill_level', 'game_type', 'gamer_id') + depth = 2 + + \ No newline at end of file -- 2.47.3 From c7e9baf2f89d7e9e70183f8d0562815ee978bcc1 Mon Sep 17 00:00:00 2001 From: bytesparallel Date: Fri, 18 Feb 2022 11:14:35 -0600 Subject: [PATCH 4/4] Completed server side for ch 12 --- levelupapi/models/events.py | 2 +- levelupapi/views/events.py | 14 +++++++++++++- levelupapi/views/games.py | 18 ++++++++++++++++-- 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/levelupapi/models/events.py b/levelupapi/models/events.py index 6ce28a1..b25d51f 100644 --- a/levelupapi/models/events.py +++ b/levelupapi/models/events.py @@ -4,7 +4,7 @@ from levelupapi.models.game import Game class Event(models.Model): - game= models.ForeignKey(Game, on_delete=models.DO_NOTHING) + game= models.ForeignKey(Game, on_delete=models.CASCADE) description = models.CharField(max_length=256) date = models.DateField() time = models.TimeField((""), auto_now=False, auto_now_add=False) diff --git a/levelupapi/views/events.py b/levelupapi/views/events.py index 7550a48..77f59ac 100644 --- a/levelupapi/views/events.py +++ b/levelupapi/views/events.py @@ -72,7 +72,19 @@ class EventView(ViewSet): event.save() return Response(None, status=status.HTTP_204_NO_CONTENT) - + def destroy(self, request, pk): + """Handle DELETE requests for a game + + Args: + request (object): DELETE request object + pk (num): Accepts the argument of the primary key of an event + + Returns: + Status: If the method completes successfully, return a HTTP response 204 + """ + event = Event.objects.get(pk=pk) + event.delete() + return Response(None, status=status.HTTP_204_NO_CONTENT) class EventSerializer(serializers.ModelSerializer): """JSON serializer for event types """ diff --git a/levelupapi/views/games.py b/levelupapi/views/games.py index 3546014..7fb2cd6 100644 --- a/levelupapi/views/games.py +++ b/levelupapi/views/games.py @@ -26,10 +26,10 @@ class GameView(ViewSet): def list(self, request): - """Handle GET requests to get all game s + """Handle GET requests to get all games Returns: - Response -- JSON serialized list of game s + Response -- JSON serialized list of games """ game_ = request.query_params.get('type', None) games = Game.objects.all() @@ -76,6 +76,20 @@ class GameView(ViewSet): game.save() return Response(None, status=status.HTTP_204_NO_CONTENT) + def destroy(self, request, pk): + """Handle DELETE requests for a game + + Args: + request (object): DELETE request object + pk (num): Accepts the argument of the primary key of a game + + Returns: + Status: If the method completes successfully, return a HTTP response 204 + """ + game = Game.objects.get(pk=pk) + game.delete() + return Response(None, status=status.HTTP_204_NO_CONTENT) + class GameSerializer(serializers.ModelSerializer): """JSON serializer for game s -- 2.47.3