Skip to content

All issues fixed. #10

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Open
wants to merge 9 commits into
base: main
Choose a base branch
from
3 changes: 3 additions & 0 deletions pokemon/admin.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
from django.contrib import admin
from .models import Pokemon, PokemonTypes

# Register your models here.
admin.site.register(Pokemon)
admin.site.register(PokemonTypes)
11 changes: 7 additions & 4 deletions pokemon/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,15 @@
from pokemon.models import Pokemon, PokemonTypes


# TODO: Add a serializer for PokemonTypes, and use it as a nested serializer for PokemonSerializer


class PokemonTypesSerializer(serializers.ModelSerializer):
class Meta:
model = PokemonTypes
fields = ('type','id',)

class PokemonSerializer(serializers.ModelSerializer):

types = PokemonTypesSerializer(many=True,read_only=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',)
63 changes: 50 additions & 13 deletions pokemon/views.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
from django.http import JsonResponse, HttpResponse
from django.http import JsonResponse
from django.views.decorators.csrf import csrf_exempt
from rest_framework.decorators import api_view

from pokemon.models import Pokemon, VALID_POKEMON_TYPES
from django.db.models import Q
from rest_framework.views import status
from pokemon.models import Pokemon, PokemonTypes
from pokemon.serializers import PokemonSerializer


Expand All @@ -16,15 +17,18 @@ def pokemon_list(request):
serializer = PokemonSerializer(pokemon, many=True)
return JsonResponse(serializer.data, safe=False, json_dumps_params={'ensure_ascii': False})


@csrf_exempt
@api_view(['GET'])
def pokemon_by_id(request, id):
"""
Get Pokemon by ID
"""
# TODO: Implement Endpoint
return HttpResponse(status=501)
try:
pokemon = Pokemon.objects.get(id=id)
except:
return JsonResponse({"error": "Not found"},status=404)
serializer = PokemonSerializer(pokemon)
return JsonResponse(serializer.data, safe=False, json_dumps_params={'ensure_ascii': False})


@csrf_exempt
Expand All @@ -33,23 +37,56 @@ def pokemon_by_name(request, name):
"""
Get Pokemon by name
"""
# TODO: Implement Endpoint
return HttpResponse(status=501)
pokemon = Pokemon.objects.filter(
Q(name_english__icontains=name) |
Q(name_japanese__icontains=name) |
Q(name_chinese__icontains=name) |
Q(name_french__icontains=name)
)
serializer = PokemonSerializer(pokemon, many=True)
if serializer == []:
return JsonResponse({"error": "Not found"},status=404)
return JsonResponse(serializer.data, safe=False, json_dumps_params={'ensure_ascii': False})


@csrf_exempt
def pokemon_by_type(request, pokemon_type):
"""
Get Pokemon by type
"""
# TODO: Implement Endpoint
return HttpResponse(status=501)

pokemon_types = PokemonTypes.objects.filter(type__icontains=pokemon_type)
pokemons = [ pokemon_type.pokemon for pokemon_type in pokemon_types]
if pokemons == []:
return JsonResponse({"error":"Bad request"},status=404)
serializer = PokemonSerializer(pokemons, many=True)
return JsonResponse(serializer.data, safe=False, json_dumps_params={'ensure_ascii': False})

@csrf_exempt
def pokemon_by_hp(request):
"""
Get Pokemon by HP
"""
# TODO: Implement Endpoint
return HttpResponse(status=501)
params = request.GET
hp_lt = request.GET.get("lt")
hp_gt = request.GET.get("gt")
query = Q()

for key in params:
if key not in ["gt","gte","lt","lte"]:
return JsonResponse({"error":'Invalid Operator. Must be one of ["gt","gte","lt","lte"]'},status=404)

if hp_gt:
query &= Q(hp__gt = hp_gt)

if hp_lt:
query &= Q(hp__lt = hp_lt)

if hp_gt and hp_lt:
if hp_gt > hp_lt:
return JsonResponse({"error":"Not found"},status=404)

pokemons = Pokemon.objects.filter(query)
serializer = PokemonSerializer(pokemons,many=True)

return JsonResponse(serializer.data, safe=False, json_dumps_params={'ensure_ascii': False})