diff --git a/games/graphql/mutations/__init__.py b/games/graphql/mutations/__init__.py new file mode 100644 index 0000000..c44e61a --- /dev/null +++ b/games/graphql/mutations/__init__.py @@ -0,0 +1 @@ +from .game import Mutation as GameMutation diff --git a/games/graphql/mutations/game.py b/games/graphql/mutations/game.py new file mode 100644 index 0000000..c298606 --- /dev/null +++ b/games/graphql/mutations/game.py @@ -0,0 +1,29 @@ +import graphene + +from games.graphql.types import Game +from games.models import Game as GameModel + + +class UpdateGameMutation(graphene.Mutation): + class Arguments: + id = graphene.ID(required=True) + name = graphene.String() + year_released = graphene.Int() + wikidata = graphene.String() + + game = graphene.Field(Game) + + def mutate(self, info, id, name=None, year_released=None, wikidata=None): + game_instance = GameModel.objects.get(pk=id) + if name is not None: + game_instance.name = name + if year_released is not None: + game_instance.year_released = year_released + if wikidata is not None: + game_instance.wikidata = wikidata + game_instance.save() + return UpdateGameMutation(game=game_instance) + + +class Mutation(graphene.ObjectType): + update_game = UpdateGameMutation.Field() diff --git a/games/graphql/queries/__init__.py b/games/graphql/queries/__init__.py new file mode 100644 index 0000000..7eb49a9 --- /dev/null +++ b/games/graphql/queries/__init__.py @@ -0,0 +1,6 @@ +from .device import Query as DeviceQuery +from .edition import Query as EditionQuery +from .game import Query as GameQuery +from .platform import Query as PlatformQuery +from .purchase import Query as PurchaseQuery +from .session import Query as SessionQuery diff --git a/games/graphql/queries/device.py b/games/graphql/queries/device.py new file mode 100644 index 0000000..19657eb --- /dev/null +++ b/games/graphql/queries/device.py @@ -0,0 +1,11 @@ +import graphene + +from games.graphql.types import Device +from games.models import Device as DeviceModel + + +class Query(graphene.ObjectType): + devices = graphene.List(Device) + + def resolve_devices(self, info, **kwargs): + return DeviceModel.objects.all() diff --git a/games/graphql/queries/edition.py b/games/graphql/queries/edition.py new file mode 100644 index 0000000..63a2492 --- /dev/null +++ b/games/graphql/queries/edition.py @@ -0,0 +1,11 @@ +import graphene + +from games.graphql.types import Edition +from games.models import Game as EditionModel + + +class Query(graphene.ObjectType): + editions = graphene.List(Edition) + + def resolve_editions(self, info, **kwargs): + return EditionModel.objects.all() diff --git a/games/graphql/queries/game.py b/games/graphql/queries/game.py new file mode 100644 index 0000000..0c74173 --- /dev/null +++ b/games/graphql/queries/game.py @@ -0,0 +1,18 @@ +import graphene + +from games.graphql.types import Game +from games.models import Game as GameModel + + +class Query(graphene.ObjectType): + games = graphene.List(Game) + game_by_name = graphene.Field(Game, name=graphene.String(required=True)) + + def resolve_games(self, info, **kwargs): + return GameModel.objects.all() + + def resolve_game_by_name(self, info, name): + try: + return GameModel.objects.get(name=name) + except GameModel.DoesNotExist: + return None diff --git a/games/graphql/queries/platform.py b/games/graphql/queries/platform.py new file mode 100644 index 0000000..44226b3 --- /dev/null +++ b/games/graphql/queries/platform.py @@ -0,0 +1,11 @@ +import graphene + +from games.graphql.types import Platform +from games.models import Platform as PlatformModel + + +class Query(graphene.ObjectType): + platforms = graphene.List(Platform) + + def resolve_platforms(self, info, **kwargs): + return PlatformModel.objects.all() diff --git a/games/graphql/queries/purchase.py b/games/graphql/queries/purchase.py new file mode 100644 index 0000000..e54e0d5 --- /dev/null +++ b/games/graphql/queries/purchase.py @@ -0,0 +1,11 @@ +import graphene + +from games.graphql.types import Purchase +from games.models import Purchase as PurchaseModel + + +class Query(graphene.ObjectType): + purchases = graphene.List(Purchase) + + def resolve_purchases(self, info, **kwargs): + return PurchaseModel.objects.all() diff --git a/games/graphql/queries/session.py b/games/graphql/queries/session.py new file mode 100644 index 0000000..42afbf1 --- /dev/null +++ b/games/graphql/queries/session.py @@ -0,0 +1,11 @@ +import graphene + +from games.graphql.types import Session +from games.models import Session as SessionModel + + +class Query(graphene.ObjectType): + sessions = graphene.List(Session) + + def resolve_sessions(self, info, **kwargs): + return SessionModel.objects.all() diff --git a/games/graphql/types.py b/games/graphql/types.py new file mode 100644 index 0000000..4d2de17 --- /dev/null +++ b/games/graphql/types.py @@ -0,0 +1,44 @@ +from graphene_django import DjangoObjectType + +from games.models import Device as DeviceModel +from games.models import Edition as EditionModel +from games.models import Game as GameModel +from games.models import Platform as PlatformModel +from games.models import Purchase as PurchaseModel +from games.models import Session as SessionModel + + +class Game(DjangoObjectType): + class Meta: + model = GameModel + fields = "__all__" + + +class Edition(DjangoObjectType): + class Meta: + model = EditionModel + fields = "__all__" + + +class Purchase(DjangoObjectType): + class Meta: + model = PurchaseModel + fields = "__all__" + + +class Session(DjangoObjectType): + class Meta: + model = SessionModel + fields = "__all__" + + +class Platform(DjangoObjectType): + class Meta: + model = PlatformModel + fields = "__all__" + + +class Device(DjangoObjectType): + class Meta: + model = DeviceModel + fields = "__all__" diff --git a/games/schema.py b/games/schema.py index a5d2908..96d2239 100644 --- a/games/schema.py +++ b/games/schema.py @@ -1,82 +1,30 @@ import graphene -from graphene_django import DjangoObjectType -from .models import Device as DeviceModel -from .models import Edition as EditionModel -from .models import Game as GameModel -from .models import Platform as PlatformModel -from .models import Purchase as PurchaseModel -from .models import Session as SessionModel +from games.graphql.mutations import GameMutation +from games.graphql.queries import ( + DeviceQuery, + EditionQuery, + GameQuery, + PlatformQuery, + PurchaseQuery, + SessionQuery, +) -class Game(DjangoObjectType): - class Meta: - model = GameModel - fields = "__all__" +class Query( + GameQuery, + EditionQuery, + DeviceQuery, + PlatformQuery, + PurchaseQuery, + SessionQuery, + graphene.ObjectType, +): + pass -class Edition(DjangoObjectType): - class Meta: - model = EditionModel - fields = "__all__" +class Mutation(GameMutation, graphene.ObjectType): + pass -class Purchase(DjangoObjectType): - class Meta: - model = PurchaseModel - fields = "__all__" - - -class Session(DjangoObjectType): - class Meta: - model = SessionModel - fields = "__all__" - - -class Platform(DjangoObjectType): - class Meta: - model = PlatformModel - fields = "__all__" - - -class Device(DjangoObjectType): - class Meta: - model = DeviceModel - fields = "__all__" - - -class Query(graphene.ObjectType): - games = graphene.List(Game) - game_by_name = graphene.Field(Game, name=graphene.String(required=True)) - purchases = graphene.List(Purchase) - editions = graphene.List(Edition) - sessions = graphene.List(Session) - platforms = graphene.List(Platform) - devices = graphene.List(Device) - - def resolve_games(self, info, **kwargs): - return GameModel.objects.all() - - def resolve_game_by_name(self, info, name): - try: - return GameModel.objects.get(name=name) - except GameModel.DoesNotExist: - return None - - def resolve_editions(self, info, **kwargs): - return EditionModel.objects.all() - - def resolve_purchases(self, info, **kwargs): - return PurchaseModel.objects.all() - - def resolve_sessions(self, info, **kwargs): - return SessionModel.objects.all() - - def resolve_platforms(self, info, **kwargs): - return PlatformModel.objects.all() - - def resolve_devices(self, info, **kwargs): - return DeviceModel.objects.all() - - -schema = graphene.Schema(query=Query) +schema = graphene.Schema(query=Query, mutation=Mutation)