From 0d987411a2b3bc45d225021931429079d85b94d8 Mon Sep 17 00:00:00 2001 From: James Marvin <47727350+JMarvi3@users.noreply.github.com> Date: Tue, 20 Dec 2022 00:31:37 -0500 Subject: [PATCH 1/4] Five issues fixed. --- pokemon/serializers.py | 8 ++++++-- pokemon/views.py | 44 ++++++++++++++++++++++++++++++++++-------- 2 files changed, 42 insertions(+), 10 deletions(-) diff --git a/pokemon/serializers.py b/pokemon/serializers.py index 2148325..e9dc26c 100644 --- a/pokemon/serializers.py +++ b/pokemon/serializers.py @@ -2,12 +2,16 @@ from pokemon.models import Pokemon, PokemonTypes -# TODO: Add a serializer for PokemonTypes, and use it as a nested serializer for PokemonSerializer +class PokemonTypeSerializer(serializers.ModelSerializer): + class Meta: + model = PokemonTypes + fields = ('pokemon', 'type',) class PokemonSerializer(serializers.ModelSerializer): + types = PokemonTypeSerializer(many=True) class Meta: model = Pokemon fields = ('id', 'name_english', 'name_japanese', 'name_chinese', 'name_french', 'hp', 'attack', 'defense', - 'special_attack', 'special_defense', 'speed', ) + 'special_attack', 'special_defense', 'speed', 'types', ) diff --git a/pokemon/views.py b/pokemon/views.py index d7ef66b..b82537d 100644 --- a/pokemon/views.py +++ b/pokemon/views.py @@ -23,8 +23,12 @@ def pokemon_by_id(request, id): """ Get Pokemon by ID """ - # TODO: Implement Endpoint - return HttpResponse(status=501) + try: + pokemon = Pokemon.objects.get(id=id) + serializer = PokemonSerializer(pokemon) + return JsonResponse(serializer.data, safe=False, json_dumps_params={'ensure_ascii': False}) + except Pokemon.DoesNotExist: + return JsonResponse({'error': 'Not found'}, status=404) @csrf_exempt @@ -33,8 +37,12 @@ def pokemon_by_name(request, name): """ Get Pokemon by name """ - # TODO: Implement Endpoint - return HttpResponse(status=501) + try: + pokemon = Pokemon.objects.get(name_english__iexact=name) + serializer = PokemonSerializer(pokemon) + return JsonResponse(serializer.data, safe=False, json_dumps_params={'ensure_ascii': False}) + except Pokemon.DoesNotExist: + return JsonResponse({'error': 'Not found'}, status=404) @csrf_exempt @@ -42,8 +50,12 @@ def pokemon_by_type(request, pokemon_type): """ Get Pokemon by type """ - # TODO: Implement Endpoint - return HttpResponse(status=501) + pokemon = Pokemon.objects.filter(types__type__iexact=pokemon_type) + if pokemon: + serializer = PokemonSerializer(pokemon, many=True) + return JsonResponse(serializer.data, safe=False, json_dumps_params={'ensure_ascii': False}) + else: + return JsonResponse({'error': 'Bad request'}, status=404) @csrf_exempt @@ -51,5 +63,21 @@ def pokemon_by_hp(request): """ Get Pokemon by HP """ - # TODO: Implement Endpoint - return HttpResponse(status=501) + pokemon = Pokemon.objects.all() + for k, v in request.GET.items(): + if k == 'lt': + pokemon = pokemon.filter(hp__lt=v) + elif k == 'lte': + pokemon = pokemon.filter(hp__lte=v) + elif k == 'gt': + pokemon = pokemon.filter(hp__gt=v) + elif k == 'gte': + pokemon = pokemon.filter(hp__gte=v) + else: + return JsonResponse({'error': 'Invalid Operator. Must be one of ["gt","gte","lt","lte"]'}, + status=404) + if pokemon: + serializer = PokemonSerializer(pokemon, many=True) + return JsonResponse(serializer.data, safe=False, json_dumps_params={'ensure_ascii': False}) + else: + return JsonResponse({'error': 'Not found'}, status=404) From 12255f2987ba99c6ad4cb447b25bc333d64ce7a3 Mon Sep 17 00:00:00 2001 From: James Marvin <47727350+JMarvi3@users.noreply.github.com> Date: Tue, 20 Dec 2022 00:36:07 -0500 Subject: [PATCH 2/4] Return 400 for bad comparator(s) --- pokemon/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pokemon/views.py b/pokemon/views.py index b82537d..3f43660 100644 --- a/pokemon/views.py +++ b/pokemon/views.py @@ -75,7 +75,7 @@ def pokemon_by_hp(request): pokemon = pokemon.filter(hp__gte=v) else: return JsonResponse({'error': 'Invalid Operator. Must be one of ["gt","gte","lt","lte"]'}, - status=404) + status=400) if pokemon: serializer = PokemonSerializer(pokemon, many=True) return JsonResponse(serializer.data, safe=False, json_dumps_params={'ensure_ascii': False}) From e42baadcefc6feb93e751565d77a02147ed8d200 Mon Sep 17 00:00:00 2001 From: James Marvin <47727350+JMarvi3@users.noreply.github.com> Date: Tue, 20 Dec 2022 00:36:28 -0500 Subject: [PATCH 3/4] Don't return pokemon id with each type --- pokemon/serializers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pokemon/serializers.py b/pokemon/serializers.py index e9dc26c..85f85e0 100644 --- a/pokemon/serializers.py +++ b/pokemon/serializers.py @@ -5,7 +5,7 @@ class PokemonTypeSerializer(serializers.ModelSerializer): class Meta: model = PokemonTypes - fields = ('pokemon', 'type',) + fields = ('type', ) class PokemonSerializer(serializers.ModelSerializer): From e359017dd72ee4e138835feaa77965cc73f81259 Mon Sep 17 00:00:00 2001 From: James Marvin <47727350+JMarvi3@users.noreply.github.com> Date: Tue, 20 Dec 2022 00:41:21 -0500 Subject: [PATCH 4/4] Return 400 for bad by type request --- pokemon/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pokemon/views.py b/pokemon/views.py index 3f43660..566c8f5 100644 --- a/pokemon/views.py +++ b/pokemon/views.py @@ -55,7 +55,7 @@ def pokemon_by_type(request, pokemon_type): serializer = PokemonSerializer(pokemon, many=True) return JsonResponse(serializer.data, safe=False, json_dumps_params={'ensure_ascii': False}) else: - return JsonResponse({'error': 'Bad request'}, status=404) + return JsonResponse({'error': 'Bad request'}, status=400) @csrf_exempt