feat: implement web knowledge synchronization with ForkManage and related handlers

This commit is contained in:
CaptainB 2025-04-28 11:53:38 +08:00
parent ee37d7c320
commit 0df7c7247d
4 changed files with 32 additions and 4 deletions

View File

@ -7,8 +7,9 @@ from django.utils.translation import gettext_lazy as _
from rest_framework import serializers
from common.constants.permission_constants import Group
from knowledge.models import KnowledgeFolder
from folders.api.folder import FolderCreateRequest
from knowledge.models import KnowledgeFolder
from knowledge.serializers.knowledge_folder import KnowledgeFolderTreeSerializer
from tools.models import ToolFolder
from tools.serializers.tool_folder import ToolFolderTreeSerializer
@ -25,6 +26,18 @@ def get_folder_type(source):
return None
def get_folder_tree_serializer(source):
if source == Group.TOOL.name:
return ToolFolderTreeSerializer
elif source == Group.APPLICATION.name:
# todo app folder
return None
elif source == Group.KNOWLEDGE.name:
return KnowledgeFolderTreeSerializer
else:
return None
FOLDER_DEPTH = 2 # Folder 不能超过3层
@ -161,5 +174,6 @@ class FolderTreeSerializer(serializers.Serializer):
Q(name__contains=name)).get_cached_trees()
else:
nodes = Folder.objects.filter(Q(workspace_id=self.data.get('workspace_id'))).get_cached_trees()
serializer = ToolFolderTreeSerializer(nodes, many=True)
TreeSerializer = get_folder_tree_serializer(self.data.get('source'))
serializer = TreeSerializer(nodes, many=True)
return serializer.data # 这是可序列化的字典

View File

@ -0,0 +1,14 @@
from rest_framework import serializers
from knowledge.models import KnowledgeFolder
class KnowledgeFolderTreeSerializer(serializers.ModelSerializer):
children = serializers.SerializerMethodField()
class Meta:
model = KnowledgeFolder
fields = ['id', 'name', 'user_id', 'workspace_id', 'parent_id', 'children']
def get_children(self, obj):
return KnowledgeFolderTreeSerializer(obj.get_children(), many=True).data

View File

@ -14,7 +14,7 @@ import yaml
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
PROJECT_DIR = os.path.dirname(BASE_DIR)
logger = logging.getLogger('smartdoc.conf')
logger = logging.getLogger('maxkb.conf')
class Config(dict):

View File

@ -9,7 +9,7 @@ from maxkb import settings
from .heartbeat import *
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'smartdoc.settings')
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'maxkb.settings')
app = Celery('MaxKB')