mirror of
https://github.com/1Panel-dev/MaxKB.git
synced 2025-12-26 01:33:05 +00:00
68 lines
2.8 KiB
Python
68 lines
2.8 KiB
Python
# coding=utf-8
|
|
|
|
from typing import Dict
|
|
|
|
import uuid_utils.compat as uuid
|
|
from django.db import transaction
|
|
from django.db.models import QuerySet
|
|
from django.utils.translation import gettext_lazy as _
|
|
from rest_framework import serializers
|
|
|
|
from common.exception.app_exception import AppApiException
|
|
from knowledge.models import KnowledgeScope, Knowledge, KnowledgeType, KnowledgeWorkflow
|
|
from knowledge.serializers.knowledge import KnowledgeModelSerializer
|
|
from system_manage.models import AuthTargetType
|
|
from system_manage.serializers.user_resource_permission import UserResourcePermissionSerializer
|
|
|
|
|
|
class KnowledgeWorkflowSerializer(serializers.Serializer):
|
|
class Create(serializers.Serializer):
|
|
user_id = serializers.UUIDField(required=True, label=_('user id'))
|
|
workspace_id = serializers.CharField(required=True, label=_('workspace id'))
|
|
scope = serializers.ChoiceField(
|
|
required=False, label=_('scope'), default=KnowledgeScope.WORKSPACE, choices=KnowledgeScope.choices
|
|
)
|
|
|
|
@transaction.atomic
|
|
def save_workflow(self, instance: Dict):
|
|
self.is_valid(raise_exception=True)
|
|
|
|
folder_id = instance.get('folder_id', self.data.get('workspace_id'))
|
|
if QuerySet(Knowledge).filter(
|
|
workspace_id=self.data.get('workspace_id'), folder_id=folder_id, name=instance.get('name')
|
|
).exists():
|
|
raise AppApiException(500, _('Knowledge base name duplicate!'))
|
|
|
|
knowledge_id = uuid.uuid7()
|
|
knowledge = Knowledge(
|
|
id=knowledge_id,
|
|
name=instance.get('name'),
|
|
desc=instance.get('desc'),
|
|
user_id=self.data.get('user_id'),
|
|
type=instance.get('type', KnowledgeType.WORKFLOW),
|
|
scope=self.data.get('scope', KnowledgeScope.WORKSPACE),
|
|
folder_id=folder_id,
|
|
workspace_id=self.data.get('workspace_id'),
|
|
embedding_model_id=instance.get('embedding_model_id'),
|
|
meta={},
|
|
)
|
|
knowledge.save()
|
|
# 自动资源给授权当前用户
|
|
UserResourcePermissionSerializer(data={
|
|
'workspace_id': self.data.get('workspace_id'),
|
|
'user_id': self.data.get('user_id'),
|
|
'auth_target_type': AuthTargetType.KNOWLEDGE.value
|
|
}).auth_resource(str(knowledge_id))
|
|
|
|
knowledge_workflow = KnowledgeWorkflow(
|
|
id=uuid.uuid7(),
|
|
knowledge_id=knowledge_id,
|
|
workspace_id=self.data.get('workspace_id'),
|
|
work_flow=instance.get('work_flow', {}),
|
|
|
|
)
|
|
|
|
knowledge_workflow.save()
|
|
|
|
return {**KnowledgeModelSerializer(knowledge).data, 'document_list': []}
|