mirror of
https://github.com/spbleadersofdigtal/backend.git
synced 2024-12-01 14:53:44 +03:00
55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
from drf_spectacular.utils import extend_schema_field
|
|
from rest_framework import serializers
|
|
|
|
from pitch_deck_generator.decks.models import PitchDeck, Question, QuestionDeckHint
|
|
|
|
|
|
class BasePitchDeckSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = PitchDeck
|
|
fields = ["id", "name", "description", "logo", "created", "updated"]
|
|
extra_kwargs = {
|
|
"id": {"read_only": True},
|
|
"logo": {"read_only": True},
|
|
"name": {"read_only": True},
|
|
"created": {"read_only": True},
|
|
"updated": {"read_only": True},
|
|
}
|
|
|
|
|
|
class PitchDeckSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = PitchDeck
|
|
fields = "__all__"
|
|
|
|
|
|
class HintSerializer(serializers.Serializer):
|
|
type = serializers.ChoiceField(choices=Question.QuestionType.choices)
|
|
value = serializers.JSONField()
|
|
|
|
|
|
class QuestionSerializer(serializers.ModelSerializer):
|
|
hint = serializers.SerializerMethodField(method_name="get_hint")
|
|
next_id = serializers.SerializerMethodField(method_name="get_next_id")
|
|
|
|
@extend_schema_field(HintSerializer)
|
|
def get_hint(self, obj):
|
|
if obj.hint:
|
|
if q := QuestionDeckHint.objects.filter(
|
|
question_id=self.context["kwargs"]["question"],
|
|
deck_id=self.context["kwargs"]["deck"],
|
|
):
|
|
return q.first().hint
|
|
return ""
|
|
return False
|
|
|
|
@extend_schema_field(serializers.IntegerField)
|
|
def get_next_id(self, obj):
|
|
if q := Question.objects.filter(order=obj.order + 1):
|
|
return q.first().id
|
|
return 0
|
|
|
|
class Meta:
|
|
model = Question
|
|
fields = ["id", "text", "hint", "required", "params", "next_id"]
|