38 lines
1005 B
Python
38 lines
1005 B
Python
import graphene
|
|
import json
|
|
from graphene import relay
|
|
|
|
from api.utils import get_object
|
|
from surveys.inputs import UpdateAnswerArgument
|
|
from surveys.models import Survey, Answer
|
|
from surveys.schema import AnswerNode
|
|
|
|
|
|
class UpdateAnswer(relay.ClientIDMutation):
|
|
class Input:
|
|
answer = graphene.Argument(UpdateAnswerArgument)
|
|
|
|
answer = graphene.Field(AnswerNode)
|
|
|
|
@classmethod
|
|
def mutate_and_get_payload(cls, root, info, **kwargs):
|
|
user = info.context.user
|
|
|
|
answer = kwargs.get('answer')
|
|
survey_id = answer.get('survey_id')
|
|
data = json.loads(answer.get('data'))
|
|
survey = get_object(Survey, survey_id)
|
|
|
|
try:
|
|
answer = survey.answers.get(owner=user)
|
|
answer.data = data
|
|
answer.save()
|
|
except Answer.DoesNotExist:
|
|
answer = Answer.objects.create(owner=user, survey=survey, data=data)
|
|
|
|
return cls(answer=answer)
|
|
|
|
|
|
class SurveyMutations:
|
|
update_answer = UpdateAnswer.Field()
|