from rest_framework import serializers class IngestTextRequestSerializer(serializers.Serializer): lessonId = serializers.IntegerField() gradeId = serializers.IntegerField(required=False, allow_null=True) subject = serializers.CharField() lessonNumber = serializers.IntegerField() chapter = serializers.IntegerField(required=False, allow_null=True) title = serializers.CharField(required=False, allow_blank=True, default='') text = serializers.CharField() class IngestPdfRequestSerializer(serializers.Serializer): lessonId = serializers.IntegerField() gradeId = serializers.IntegerField(required=False, allow_null=True) subject = serializers.CharField() lessonNumber = serializers.IntegerField() chapter = serializers.IntegerField(required=False, allow_null=True) title = serializers.CharField(required=False, allow_blank=True, default='') chapterName = serializers.CharField(required=False, allow_blank=True, default='') # یکی از این دو: فایل مستقیم (multipart) یا base64 pdf = serializers.FileField(required=False) pdfBase64 = serializers.CharField(required=False, allow_blank=True) def validate(self, attrs): if not attrs.get('pdf') and not attrs.get('pdfBase64'): raise serializers.ValidationError('یکی از pdf یا pdfBase64 لازم است.') return attrs class IngestResponseSerializer(serializers.Serializer): status = serializers.CharField() collection = serializers.CharField() chunksCreated = serializers.IntegerField() chunkIds = serializers.ListField(child=serializers.IntegerField(), required=False) class ChunkSerializer(serializers.Serializer): id = serializers.IntegerField() lessonId = serializers.IntegerField(source='lesson_id') subject = serializers.CharField() lessonNumber = serializers.IntegerField(source='lesson_number') chapter = serializers.IntegerField(allow_null=True) order = serializers.IntegerField() title = serializers.CharField() summary = serializers.CharField() collection = serializers.CharField() class ChunkListResponseSerializer(serializers.Serializer): count = serializers.IntegerField() results = ChunkSerializer(many=True)