From 4f8d7f657579788a0ffb66b7bfaeab83fb556f02 Mon Sep 17 00:00:00 2001 From: bytesparallel Date: Tue, 8 Feb 2022 14:19:32 -0600 Subject: [PATCH 1/2] saving vanilla ch6 work --- levelup/urls.py | 5 +++++ levelupapi/views/__init__.py | 4 +++- levelupapi/views/events.py | 37 ++++++++++++++++++++++++++++++++++++ levelupapi/views/games.py | 37 ++++++++++++++++++++++++++++++++++++ 4 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 levelupapi/views/events.py create mode 100644 levelupapi/views/games.py diff --git a/levelup/urls.py b/levelup/urls.py index 1f4b38d..2b91885 100644 --- a/levelup/urls.py +++ b/levelup/urls.py @@ -18,15 +18,20 @@ from django.conf.urls import include from django.urls import path from levelupapi.views import register_user, login_user from rest_framework import routers +from levelupapi.views.games import GameView from levelupapi.views.game_type import GameTypeView +from levelupapi.views.events import EventView router = routers.DefaultRouter(trailing_slash=False) router.register(r'gametypes', GameTypeView, 'gametype') +router.register(r'games', GameView, 'game') +router.register(r'events', EventView, 'event') urlpatterns = [ path('register', register_user), path('login', login_user), path('', include(router.urls)), path('admin/', admin.site.urls), + ] diff --git a/levelupapi/views/__init__.py b/levelupapi/views/__init__.py index 0801135..2312ab4 100644 --- a/levelupapi/views/__init__.py +++ b/levelupapi/views/__init__.py @@ -1 +1,3 @@ -from .auth import login_user, register_user \ No newline at end of file +from .auth import login_user, register_user +from .game_type import GameTypeView +from .games import GameView \ No newline at end of file diff --git a/levelupapi/views/events.py b/levelupapi/views/events.py new file mode 100644 index 0000000..db1a71f --- /dev/null +++ b/levelupapi/views/events.py @@ -0,0 +1,37 @@ +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 + +class EventView(ViewSet): + """Level up event types view""" + + def retrieve(self, request, pk): + """Handle GET requests for single event type + + + Returns: + Response -- JSON serialized event type + """ + event = Event.objects.get(pk=pk) + serializer = EventSerializer(event) + return Response(serializer.data) + + + def list(self, request): + """Handle GET requests to get all event types + + Returns: + Response -- JSON serialized list of event types + """ + event = Event.objects.all() + serializer = EventSerializer(event, many=True) + return Response(serializer.data) + +class EventSerializer(serializers.ModelSerializer): + """JSON serializer for event types + """ + class Meta: + model = Event + fields = ('id', 'description', 'date', 'time', 'game_id', 'organizer_id') \ No newline at end of file diff --git a/levelupapi/views/games.py b/levelupapi/views/games.py new file mode 100644 index 0000000..152803e --- /dev/null +++ b/levelupapi/views/games.py @@ -0,0 +1,37 @@ +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 + +class GameView(ViewSet): + """Level up game types view""" + + def retrieve(self, request, pk): + """Handle GET requests for single game type + + + Returns: + Response -- JSON serialized game type + """ + game = Game.objects.get(pk=pk) + serializer = GameSerializer(game) + return Response(serializer.data) + + + def list(self, request): + """Handle GET requests to get all game types + + Returns: + Response -- JSON serialized list of game types + """ + game = Game.objects.all() + serializer = GameSerializer(game, many=True) + return Response(serializer.data) + +class GameSerializer(serializers.ModelSerializer): + """JSON serializer for game types + """ + class Meta: + model = Game + fields = ('id', 'title', 'maker', 'number_of_players', 'skill_level', 'game_type_id', 'gamer_id') \ No newline at end of file -- 2.47.3 From ccb6bcae1a33ac63f977dacee32ac609dd910743 Mon Sep 17 00:00:00 2001 From: bytesparallel Date: Wed, 9 Feb 2022 14:10:33 -0600 Subject: [PATCH 2/2] completed ch. 6 --- levelup/urls.py | 2 ++ levelupapi/db.sql | 6 ++---- levelupapi/fixtures/games.json | 2 +- levelupapi/views/events.py | 22 ++++++++++++++++------ levelupapi/views/game_type.py | 17 ++++++++++++----- levelupapi/views/games.py | 34 ++++++++++++++++++++++------------ 6 files changed, 55 insertions(+), 28 deletions(-) diff --git a/levelup/urls.py b/levelup/urls.py index 2b91885..7c65d8c 100644 --- a/levelup/urls.py +++ b/levelup/urls.py @@ -30,8 +30,10 @@ router.register(r'events', EventView, 'event') urlpatterns = [ path('register', register_user), path('login', login_user), + path('api-auth', include('rest_framework.urls', namespace='rest_framework')), path('', include(router.urls)), path('admin/', admin.site.urls), + ] diff --git a/levelupapi/db.sql b/levelupapi/db.sql index aca671e..15c11a2 100644 --- a/levelupapi/db.sql +++ b/levelupapi/db.sql @@ -1,4 +1,2 @@ - -SELECT * FROM auth_user; -SELECT * FROM authtoken_token; -SELECT * FROM levelupapi_gamer; \ No newline at end of file +UPDATE levelupapi_game SET game_type_id = 3 +WHERE title = 'World of Warcraft'; \ No newline at end of file diff --git a/levelupapi/fixtures/games.json b/levelupapi/fixtures/games.json index fc99187..e4359d2 100644 --- a/levelupapi/fixtures/games.json +++ b/levelupapi/fixtures/games.json @@ -13,7 +13,7 @@ }, { "model": "levelupapi.game", - "pk": 2, + "pk": 3, "fields": { "game_type": 2, "title": "World of Warcraft", diff --git a/levelupapi/views/events.py b/levelupapi/views/events.py index db1a71f..d3a53d1 100644 --- a/levelupapi/views/events.py +++ b/levelupapi/views/events.py @@ -14,9 +14,13 @@ class EventView(ViewSet): Returns: Response -- JSON serialized event type """ - event = Event.objects.get(pk=pk) - serializer = EventSerializer(event) - return Response(serializer.data) + try: + game_type = Event.objects.get(pk=pk) + serializer = EventSerializer(game_type) + return Response(serializer.data) + except Event.DoesNotExist as ex: + return Response({'message': ex.args[0]}, status=status.HTTP_404_NOT_FOUND) + def list(self, request): @@ -25,8 +29,13 @@ class EventView(ViewSet): Returns: Response -- JSON serialized list of event types """ - event = Event.objects.all() - serializer = EventSerializer(event, many=True) + events = Event.objects.all() + +# Add in the next 3 lines + game = request.query_params.get('game_id', None) + if game is not None: + events = events.filter(game_id=game) + serializer = EventSerializer(events, many=True) return Response(serializer.data) class EventSerializer(serializers.ModelSerializer): @@ -34,4 +43,5 @@ class EventSerializer(serializers.ModelSerializer): """ class Meta: model = Event - fields = ('id', 'description', 'date', 'time', 'game_id', 'organizer_id') \ No newline at end of file + fields = ('id', 'description', 'date', 'time', 'game_id', '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 8fcfd12..add2d19 100644 --- a/levelupapi/views/game_type.py +++ b/levelupapi/views/game_type.py @@ -1,9 +1,11 @@ """View module for handling requests about game types""" +from cProfile import label +from pickle import NONE 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 GameType +from levelupapi.models import GameType, game_type class GameTypeView(ViewSet): @@ -16,10 +18,12 @@ class GameTypeView(ViewSet): Returns: Response -- JSON serialized game type """ - game_type = GameType.objects.get(pk=pk) - serializer = GameTypeSerializer(game_type) - return Response(serializer.data) - + try: + game_type = GameType.objects.get(pk=pk) + serializer = GameTypeSerializer(game_type) + return Response(serializer.data) + except GameType.DoesNotExist as ex: + return Response({'message': ex.args[0]}, status=status.HTTP_404_NOT_FOUND) def list(self, request): """Handle GET requests to get all game types @@ -27,7 +31,10 @@ 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 152803e..72c1b9a 100644 --- a/levelupapi/views/games.py +++ b/levelupapi/views/games.py @@ -5,33 +5,43 @@ from rest_framework import serializers, status from levelupapi.models import Game class GameView(ViewSet): - """Level up game types view""" + """Level up game s view""" def retrieve(self, request, pk): - """Handle GET requests for single game type + """Handle GET requests for single game Returns: - Response -- JSON serialized game type + Response -- JSON serialized game """ - game = Game.objects.get(pk=pk) - serializer = GameSerializer(game) - return Response(serializer.data) + + +# Add in the next 3 lines + try: + game = Game.objects.get(pk=pk) + serializer = GameSerializer(game) + return Response(serializer.data) + except Game.DoesNotExist as ex: + return Response({'message': ex.args[0]}, status=status.HTTP_404_NOT_FOUND) def list(self, request): - """Handle GET requests to get all game types + """Handle GET requests to get all game s Returns: - Response -- JSON serialized list of game types + Response -- JSON serialized list of game s """ - game = Game.objects.all() - serializer = GameSerializer(game, many=True) + game_ = request.query_params.get('type', None) + games = Game.objects.all() + if game_ is not None: + games = games.filter(game_type_id=game_) + serializer = GameSerializer(games, many=True) return Response(serializer.data) class GameSerializer(serializers.ModelSerializer): - """JSON serializer for game types + """JSON serializer for game s """ class Meta: model = Game - fields = ('id', 'title', 'maker', 'number_of_players', 'skill_level', 'game_type_id', 'gamer_id') \ No newline at end of file + fields = ('id', 'title', 'maker', 'number_of_players', 'skill_level', 'game_type_id', 'gamer_id') + depth = 1 \ No newline at end of file -- 2.47.3