From f7a4aca0e8528b7b157ab5cdf1945558c2f4c166 Mon Sep 17 00:00:00 2001 From: CaptainB Date: Fri, 25 Apr 2025 20:31:59 +0800 Subject: [PATCH] feat: implement knowledge creation APIs for base, web, lark, and yuque --- apps/knowledge/api/knowledge.py | 68 +++++++++++++++++++++- apps/knowledge/urls.py | 4 ++ apps/knowledge/views/knowledge.py | 94 +++++++++++++++++++++++++------ 3 files changed, 149 insertions(+), 17 deletions(-) diff --git a/apps/knowledge/api/knowledge.py b/apps/knowledge/api/knowledge.py index 02c198227..58e6cd79b 100644 --- a/apps/knowledge/api/knowledge.py +++ b/apps/knowledge/api/knowledge.py @@ -11,7 +11,73 @@ class KnowledgeCreateResponse(ResultSerializer): return KnowledgeModelSerializer() -class KnowledgeCreateAPI(APIMixin): +class KnowledgeBaseCreateAPI(APIMixin): + @staticmethod + def get_parameters(): + return [ + OpenApiParameter( + name="workspace_id", + description="工作空间id", + type=OpenApiTypes.STR, + location='path', + required=True, + ) + ] + + @staticmethod + def get_request(): + return KnowledgeBaseCreateRequest + + @staticmethod + def get_response(): + return KnowledgeCreateResponse + + +class KnowledgeWebCreateAPI(APIMixin): + @staticmethod + def get_parameters(): + return [ + OpenApiParameter( + name="workspace_id", + description="工作空间id", + type=OpenApiTypes.STR, + location='path', + required=True, + ) + ] + + @staticmethod + def get_request(): + return KnowledgeBaseCreateRequest + + @staticmethod + def get_response(): + return KnowledgeCreateResponse + + +class KnowledgeLarkCreateAPI(APIMixin): + @staticmethod + def get_parameters(): + return [ + OpenApiParameter( + name="workspace_id", + description="工作空间id", + type=OpenApiTypes.STR, + location='path', + required=True, + ) + ] + + @staticmethod + def get_request(): + return KnowledgeBaseCreateRequest + + @staticmethod + def get_response(): + return KnowledgeCreateResponse + + +class KnowledgeYuqueCreateAPI(APIMixin): @staticmethod def get_parameters(): return [ diff --git a/apps/knowledge/urls.py b/apps/knowledge/urls.py index c5b527e0d..d84a9eca6 100644 --- a/apps/knowledge/urls.py +++ b/apps/knowledge/urls.py @@ -5,4 +5,8 @@ from . import views app_name = "knowledge" urlpatterns = [ path('workspace//knowledge', views.KnowledgeView.as_view()), + path('workspace//knowledge/base', views.KnowledgeBaseView.as_view()), + path('workspace//knowledge/web', views.KnowledgeWebView.as_view()), + path('workspace//knowledge/lark', views.KnowledgeLarkView.as_view()), + path('workspace//knowledge/yuque', views.KnowledgeYuqueView.as_view()), ] diff --git a/apps/knowledge/views/knowledge.py b/apps/knowledge/views/knowledge.py index cc64372a2..0fe4fa0d6 100644 --- a/apps/knowledge/views/knowledge.py +++ b/apps/knowledge/views/knowledge.py @@ -7,28 +7,14 @@ from common.auth import TokenAuth from common.auth.authentication import has_permissions from common.constants.permission_constants import PermissionConstants from common.result import result -from knowledge.api.knowledge import KnowledgeCreateAPI, KnowledgeTreeReadAPI +from knowledge.api.knowledge import KnowledgeBaseCreateAPI, KnowledgeLarkCreateAPI, \ + KnowledgeWebCreateAPI, KnowledgeYuqueCreateAPI, KnowledgeTreeReadAPI from knowledge.serializers.knowledge import KnowledgeSerializer, KnowledgeTreeSerializer class KnowledgeView(APIView): authentication_classes = [TokenAuth] - @extend_schema( - methods=['POST'], - description=_('Create knowledge'), - operation_id=_('Create knowledge'), - parameters=KnowledgeCreateAPI.get_parameters(), - request=KnowledgeCreateAPI.get_request(), - responses=KnowledgeCreateAPI.get_response(), - tags=[_('Knowledge Base')] - ) - @has_permissions(PermissionConstants.KNOWLEDGE_CREATE.get_workspace_permission()) - def post(self, request: Request, workspace_id: str): - return result.success(KnowledgeSerializer.Create( - data={'user_id': request.user.id, 'workspace_id': workspace_id} - ).insert(request.data)) - @extend_schema( methods=['GET'], description=_('Get knowledge by module'), @@ -42,3 +28,79 @@ class KnowledgeView(APIView): return result.success(KnowledgeTreeSerializer( data={'workspace_id': workspace_id} ).get_knowledge_list(request.query_params.get('module_id'))) + + +class KnowledgeBaseView(APIView): + authentication_classes = [TokenAuth] + + @extend_schema( + methods=['POST'], + description=_('Create base knowledge'), + operation_id=_('Create base knowledge'), + parameters=KnowledgeBaseCreateAPI.get_parameters(), + request=KnowledgeBaseCreateAPI.get_request(), + responses=KnowledgeBaseCreateAPI.get_response(), + tags=[_('Knowledge Base')] + ) + @has_permissions(PermissionConstants.KNOWLEDGE_CREATE.get_workspace_permission()) + def post(self, request: Request, workspace_id: str): + return result.success(KnowledgeSerializer.Create( + data={'user_id': request.user.id, 'workspace_id': workspace_id} + ).insert(request.data)) + + +class KnowledgeWebView(APIView): + authentication_classes = [TokenAuth] + + @extend_schema( + methods=['POST'], + description=_('Create web knowledge'), + operation_id=_('Create web knowledge'), + parameters=KnowledgeWebCreateAPI.get_parameters(), + request=KnowledgeWebCreateAPI.get_request(), + responses=KnowledgeWebCreateAPI.get_response(), + tags=[_('Knowledge Base')] + ) + @has_permissions(PermissionConstants.KNOWLEDGE_CREATE.get_workspace_permission()) + def post(self, request: Request, workspace_id: str): + return result.success(KnowledgeSerializer.Create( + data={'user_id': request.user.id, 'workspace_id': workspace_id} + ).insert(request.data)) + + +class KnowledgeLarkView(APIView): + authentication_classes = [TokenAuth] + + @extend_schema( + methods=['POST'], + description=_('Create lark knowledge'), + operation_id=_('Create lark knowledge'), + parameters=KnowledgeLarkCreateAPI.get_parameters(), + request=KnowledgeLarkCreateAPI.get_request(), + responses=KnowledgeLarkCreateAPI.get_response(), + tags=[_('Knowledge Base')] + ) + @has_permissions(PermissionConstants.KNOWLEDGE_CREATE.get_workspace_permission()) + def post(self, request: Request, workspace_id: str): + return result.success(KnowledgeSerializer.Create( + data={'user_id': request.user.id, 'workspace_id': workspace_id} + ).insert(request.data)) + + +class KnowledgeYuqueView(APIView): + authentication_classes = [TokenAuth] + + @extend_schema( + methods=['POST'], + description=_('Create yuque knowledge'), + operation_id=_('Create yuque knowledge'), + parameters=KnowledgeYuqueCreateAPI.get_parameters(), + request=KnowledgeYuqueCreateAPI.get_request(), + responses=KnowledgeYuqueCreateAPI.get_response(), + tags=[_('Knowledge Base')] + ) + @has_permissions(PermissionConstants.KNOWLEDGE_CREATE.get_workspace_permission()) + def post(self, request: Request, workspace_id: str): + return result.success(KnowledgeSerializer.Create( + data={'user_id': request.user.id, 'workspace_id': workspace_id} + ).insert(request.data))