Dynavera/apps/onboarding/serializers.py

106 lines
3.3 KiB
Python
Raw Normal View History

from rest_framework import serializers
from .models import OnboardingFlow, OnboardingPage, OnboardingField, OnboardingSession
from apps.orgs.models import Role
from apps.mlstore.models import Agent
class OnboardingFieldSerializer(serializers.ModelSerializer):
page = serializers.SlugRelatedField(slug_field='uuid', queryset=OnboardingPage.objects.all())
class Meta:
model = OnboardingField
fields = [
'id',
'uuid',
'page',
'order',
'key',
'label',
'field_type',
'required',
'help_text',
'placeholder',
'options',
'default_value',
'validation',
]
read_only_fields = ['id', 'uuid']
class OnboardingPageSerializer(serializers.ModelSerializer):
fields = OnboardingFieldSerializer(many=True, read_only=True)
flow = serializers.SlugRelatedField(slug_field='uuid', queryset=OnboardingFlow.objects.all())
class Meta:
model = OnboardingPage
fields = [
'id',
'uuid',
'flow',
'order',
'title',
'body',
'meta',
'fields',
]
read_only_fields = ['id', 'uuid']
class OnboardingFlowSerializer(serializers.ModelSerializer):
role = serializers.SlugRelatedField(slug_field='uuid', queryset=Role.objects.all())
agent = serializers.SlugRelatedField(slug_field='uuid', queryset=Agent.objects.all(), allow_null=True, required=False)
class Meta:
model = OnboardingFlow
fields = [
'id',
'uuid',
'role',
'agent',
'title',
'description',
'status',
'created_at',
'updated_at',
]
read_only_fields = ['id', 'uuid', 'created_at', 'updated_at']
class OnboardingFlowDetailSerializer(OnboardingFlowSerializer):
pages = OnboardingPageSerializer(many=True, read_only=True)
class Meta(OnboardingFlowSerializer.Meta):
fields = OnboardingFlowSerializer.Meta.fields + ['pages']
class OnboardingSessionSerializer(serializers.ModelSerializer):
flow = serializers.SlugRelatedField(slug_field='uuid', queryset=OnboardingFlow.objects.all())
user = serializers.SlugRelatedField(slug_field='uuid', read_only=True)
agent_run = serializers.SlugRelatedField(slug_field='uuid', read_only=True)
class Meta:
model = OnboardingSession
fields = [
'id',
'uuid',
'flow',
'user',
'agent_run',
'status',
'current_page_order',
'responses',
'created_at',
'updated_at',
'completed_at',
]
read_only_fields = ['id', 'uuid', 'user', 'agent_run', 'created_at', 'updated_at', 'completed_at']
class OnboardingSubmissionSerializer(serializers.Serializer):
page_uuid = serializers.CharField()
responses = serializers.DictField()
mark_complete = serializers.BooleanField(required=False, default=False)
class OnboardingFeedbackSerializer(serializers.Serializer):
page_uuid = serializers.CharField()
responses = serializers.DictField()
question = serializers.CharField(required=False, allow_blank=True, default='')