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/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/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..77f59ac 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""" @@ -37,11 +38,57 @@ 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 + """ + organizer = Gamer.objects.get(user=request.auth.user) + 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=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) + 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 """ 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 72c1b9a..7fb2cd6 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""" @@ -26,22 +26,78 @@ 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() 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) + + 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) + 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 """ 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 + fields = ('id', 'title', 'maker', 'number_of_players', 'skill_level', 'game_type', 'gamer_id') + depth = 2 + + + \ No newline at end of file