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, Gamer, GameType class GameView(ViewSet): """Level up game s view""" def retrieve(self, request, pk): """Handle GET requests for single game Returns: Response -- JSON serialized game """ # 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 games Returns: 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_) 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', 'gamer_id') depth = 2