Dynavera/apps/knowledge/serializers.py
2026-03-22 19:45:05 +00:00

48 lines
1.9 KiB
Python

from rest_framework.serializers import ModelSerializer, SerializerMethodField
from apps.accounts.serializers import OrganizationSerializer, RoleSerializer, UserSerializer
from apps.knowledge.models import KnowledgeChunk, TrainingFile
class TrainingFileSerializer(ModelSerializer):
uploaded_by = UserSerializer(read_only=True)
organization = OrganizationSerializer(read_only=True)
role = RoleSerializer(read_only=True)
file_url = SerializerMethodField()
scope = SerializerMethodField()
class Meta:
model = TrainingFile
fields = [
'id', 'uuid', 'organization', 'role', 'scope', 'uploaded_by', 'file', 'file_url',
'file_name', 'file_size', 'file_type', 'description',
'error_message', 'status', 'created_at', 'updated_at'
]
read_only_fields = [
'id', 'uuid', 'uploaded_by', 'file_size', 'file_type',
'error_message', 'status', 'created_at', 'updated_at',
'organization', 'role', 'scope'
]
def get_file_url(self, obj: TrainingFile):
request = self.context.get('request')
if obj.file and request:
return request.build_absolute_uri(obj.file.url)
return obj.file.url if obj.file else None
def get_scope(self, obj: TrainingFile) -> str:
return 'role' if obj.role_id else 'organization'
class KnowledgeChunkSerializer(ModelSerializer):
training_file_name = SerializerMethodField()
class Meta:
model = KnowledgeChunk
fields = [
'id', 'uuid', 'role', 'training_file', 'training_file_name',
'content', 'content_hash', 'metadata', 'chunk_index',
'is_active', 'created_at'
]
read_only_fields = ['id', 'uuid', 'content_hash', 'created_at']
def get_training_file_name(self, obj: KnowledgeChunk) -> str:
return obj.training_file.file_name if obj.training_file else None