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='')