skillbox/server/surveys/schema.py

66 lines
1.6 KiB
Python

import graphene
from graphene import relay
from graphene_django import DjangoObjectType
from graphene_django.filter import DjangoFilterConnectionField
from api.utils import get_by_id
from surveys.models import Answer
from .models import Survey
class AnswerNode(DjangoObjectType):
pk = graphene.Int()
class Meta:
model = Answer
interfaces = (relay.Node,)
filter_fields = []
def resolve_pk(self, *args, **kwargs):
return self.id
class SurveyNode(DjangoObjectType):
pk = graphene.Int()
answer = graphene.Field(AnswerNode)
path = graphene.String(required=True)
class Meta:
model = Survey
filter_fields = []
interfaces = (relay.Node,)
def resolve_pk(self, *args, **kwargs):
return self.id
def resolve_answer(self, info, **kwargs):
user = info.context.user
try:
return Answer.objects.get(owner=user, survey=self)
except Answer.DoesNotExist:
return None
@staticmethod
def resolve_path(root: Survey, info, **kwargs):
return root.route
@staticmethod
def resolve_title(root: Survey, info, **kwargs):
try:
pages = root.data["pages"]
title = pages[0]["title"]
return title
except KeyError:
return root.title
class SurveysQuery(object):
survey = graphene.Field(SurveyNode, id=graphene.ID())
surveys = DjangoFilterConnectionField(SurveyNode)
def resolve_surveys(self, info, **kwargs):
return Survey.objects.all()
def resolve_survey(self, info, **kwargs):
return get_by_id(Survey, **kwargs)