Archived
103 lines
3.2 KiB
Python
103 lines
3.2 KiB
Python
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
|
|
|
|
|
|
|