105 lines
3.3 KiB
Python
105 lines
3.3 KiB
Python
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='')
|