mirror of
https://github.com/1Panel-dev/MaxKB.git
synced 2025-12-29 16:12:55 +00:00
feat: integrate ResourceMappingSerializer for resource count retrieval across multiple modules
This commit is contained in:
parent
8295e70255
commit
2221eefff6
|
|
@ -49,6 +49,8 @@ from maxkb.conf import PROJECT_DIR
|
|||
from models_provider.models import Model
|
||||
from models_provider.tools import get_model_instance_by_model_workspace_id
|
||||
from system_manage.models import WorkspaceUserResourcePermission, AuthTargetType
|
||||
from system_manage.models.resource_mapping import ResourceMapping
|
||||
from system_manage.serializers.resource_mapping_serializers import ResourceMappingSerializer
|
||||
from system_manage.serializers.user_resource_permission import UserResourcePermissionSerializer
|
||||
from tools.models import Tool, ToolScope
|
||||
from tools.serializers.tool import ToolExportModelSerializer
|
||||
|
|
@ -411,12 +413,15 @@ class Query(serializers.Serializer):
|
|||
user_id = self.data.get("user_id")
|
||||
workspace_manage = is_workspace_manage(user_id, workspace_id)
|
||||
is_x_pack_ee = self.is_x_pack_ee()
|
||||
return native_page_search(current_page, page_size, self.get_query_set(instance, workspace_manage, is_x_pack_ee),
|
||||
get_file_content(
|
||||
os.path.join(PROJECT_DIR, "apps", "application", 'sql',
|
||||
'list_application.sql' if workspace_manage else (
|
||||
'list_application_user_ee.sql' if is_x_pack_ee else 'list_application_user.sql'))),
|
||||
)
|
||||
result = native_page_search(current_page, page_size,
|
||||
self.get_query_set(instance, workspace_manage, is_x_pack_ee),
|
||||
get_file_content(
|
||||
os.path.join(PROJECT_DIR, "apps", "application", 'sql',
|
||||
'list_application.sql' if workspace_manage else (
|
||||
'list_application_user_ee.sql' if is_x_pack_ee else 'list_application_user.sql'))),
|
||||
)
|
||||
|
||||
return ResourceMappingSerializer().get_resource_count(result)
|
||||
|
||||
|
||||
class ApplicationImportRequest(serializers.Serializer):
|
||||
|
|
@ -778,9 +783,13 @@ class ApplicationOperateSerializer(serializers.Serializer):
|
|||
def delete(self, with_valid=True):
|
||||
if with_valid:
|
||||
self.is_valid()
|
||||
QuerySet(ApplicationVersion).filter(application_id=self.data.get('application_id')).delete()
|
||||
QuerySet(ApplicationKnowledgeMapping).filter(application_id=self.data.get('application_id')).delete()
|
||||
QuerySet(Application).filter(id=self.data.get('application_id')).delete()
|
||||
application_id = self.data.get('application_id')
|
||||
QuerySet(ApplicationVersion).filter(application_id=application_id).delete()
|
||||
QuerySet(ApplicationKnowledgeMapping).filter(application_id=application_id).delete()
|
||||
QuerySet(ResourceMapping).filter(
|
||||
Q(target_id=application_id) | Q(source_id=application_id)
|
||||
).delete()
|
||||
QuerySet(Application).filter(id=application_id).delete()
|
||||
return True
|
||||
|
||||
def export(self, with_valid=True):
|
||||
|
|
|
|||
|
|
@ -46,6 +46,8 @@ from knowledge.task.sync import sync_web_knowledge, sync_replace_web_knowledge
|
|||
from maxkb.conf import PROJECT_DIR
|
||||
from models_provider.models import Model
|
||||
from system_manage.models import WorkspaceUserResourcePermission, AuthTargetType
|
||||
from system_manage.models.resource_mapping import ResourceMapping
|
||||
from system_manage.serializers.resource_mapping_serializers import ResourceMappingSerializer
|
||||
from system_manage.serializers.user_resource_permission import UserResourcePermissionSerializer
|
||||
from users.serializers.user import is_workspace_manage
|
||||
|
||||
|
|
@ -186,7 +188,7 @@ class KnowledgeSerializer(serializers.Serializer):
|
|||
raise serializers.ValidationError(_('Folder not found'))
|
||||
workspace_manage = is_workspace_manage(self.data.get('user_id'), self.data.get('workspace_id'))
|
||||
is_x_pack_ee = self.is_x_pack_ee()
|
||||
return native_page_search(
|
||||
result = native_page_search(
|
||||
current_page,
|
||||
page_size,
|
||||
self.get_query_set(workspace_manage, is_x_pack_ee),
|
||||
|
|
@ -202,6 +204,7 @@ class KnowledgeSerializer(serializers.Serializer):
|
|||
),
|
||||
post_records_handler=lambda r: r
|
||||
)
|
||||
return ResourceMappingSerializer().get_resource_count(result)
|
||||
|
||||
def list(self):
|
||||
self.is_valid(raise_exception=True)
|
||||
|
|
@ -435,6 +438,9 @@ class KnowledgeSerializer(serializers.Serializer):
|
|||
File.objects.filter(
|
||||
source_id=knowledge.id,
|
||||
).delete()
|
||||
QuerySet(ResourceMapping).filter(
|
||||
Q(target_id=knowledge) | Q(source_id=knowledge)
|
||||
).delete()
|
||||
delete_embedding_by_knowledge(self.data.get('knowledge_id'))
|
||||
return True
|
||||
|
||||
|
|
|
|||
|
|
@ -26,6 +26,8 @@ from models_provider.constants.model_provider_constants import ModelProvideConst
|
|||
from models_provider.models import Model, Status
|
||||
from models_provider.tools import get_model_credential
|
||||
from system_manage.models import WorkspaceUserResourcePermission, AuthTargetType
|
||||
from system_manage.models.resource_mapping import ResourceMapping
|
||||
from system_manage.serializers.resource_mapping_serializers import ResourceMappingSerializer
|
||||
from system_manage.serializers.user_resource_permission import UserResourcePermissionSerializer
|
||||
from users.serializers.user import is_workspace_manage
|
||||
|
||||
|
|
@ -190,6 +192,7 @@ class ModelSerializer(serializers.Serializer):
|
|||
# if dataset_count > 0:
|
||||
# raise AppApiException(500, f"该模型关联了{dataset_count} 个应用,无法删除该模型。")
|
||||
model.delete()
|
||||
ResourceMapping.objects.filter(target_id=model_id).delete()
|
||||
return True
|
||||
|
||||
def edit(self, instance: Dict, user_id: str, with_valid=True):
|
||||
|
|
@ -366,23 +369,25 @@ class ModelSerializer(serializers.Serializer):
|
|||
workspace_manage = is_workspace_manage(user_id, workspace_id)
|
||||
query_params = self._build_query_params(workspace_id, workspace_manage, user_id)
|
||||
is_x_pack_ee = self.is_x_pack_ee()
|
||||
return native_search(query_params,
|
||||
select_string=get_file_content(
|
||||
os.path.join(PROJECT_DIR, "apps", "models_provider", 'sql',
|
||||
'list_model.sql' if workspace_manage else (
|
||||
'list_model_user_ee.sql' if is_x_pack_ee else 'list_model_user.sql')
|
||||
)))
|
||||
result = native_search(query_params,
|
||||
select_string=get_file_content(
|
||||
os.path.join(PROJECT_DIR, "apps", "models_provider", 'sql',
|
||||
'list_model.sql' if workspace_manage else (
|
||||
'list_model_user_ee.sql' if is_x_pack_ee else 'list_model_user.sql')
|
||||
)))
|
||||
return ResourceMappingSerializer().get_resource_count(result)
|
||||
|
||||
def share_list(self, workspace_id, with_valid=True):
|
||||
if with_valid:
|
||||
self.is_valid(raise_exception=True)
|
||||
user_id = self.data.get("user_id")
|
||||
query_params = self._build_query_params(workspace_id, False, user_id)
|
||||
return [
|
||||
result = [
|
||||
self._build_model_data(
|
||||
model
|
||||
) for model in query_params.get('model_query_set')
|
||||
]
|
||||
return ResourceMappingSerializer().get_resource_count(result)
|
||||
|
||||
def model_list(self, workspace_id, with_valid=True):
|
||||
if with_valid:
|
||||
|
|
|
|||
|
|
@ -14,8 +14,10 @@ from django.utils.translation import gettext_lazy as _
|
|||
from rest_framework import serializers
|
||||
|
||||
from common.db.search import native_page_search, get_dynamics_model
|
||||
from common.result import Page
|
||||
from common.utils.common import get_file_content
|
||||
from maxkb.conf import PROJECT_DIR
|
||||
from system_manage.models.resource_mapping import ResourceMapping
|
||||
|
||||
|
||||
class ResourceMappingSerializer(serializers.Serializer):
|
||||
|
|
@ -51,3 +53,37 @@ class ResourceMappingSerializer(serializers.Serializer):
|
|||
return native_page_search(current_page, page_size, self.get_query_set(), get_file_content(
|
||||
os.path.join(PROJECT_DIR, "apps", "system_manage",
|
||||
'sql', 'list_resource_mapping.sql')), with_table_name=False)
|
||||
|
||||
def get_resource_count(self, result_list):
|
||||
"""
|
||||
获取资源映射计数
|
||||
"""
|
||||
if not result_list:
|
||||
return result_list
|
||||
is_paginated = isinstance(result_list, Page)
|
||||
|
||||
data_to_process = result_list.get('records') if is_paginated else result_list
|
||||
|
||||
if isinstance(data_to_process, list) and data_to_process:
|
||||
# 提取ID列表,确保每个项目都是字典且包含'id'键
|
||||
ids = [item['id'] for item in data_to_process
|
||||
if isinstance(item, dict) and 'id' in item and item['id']]
|
||||
|
||||
if ids: # 只有在ids非空时才执行查询
|
||||
mapping_counts = ResourceMapping.objects.filter(
|
||||
target_id__in=ids
|
||||
).values('target_id').annotate(
|
||||
count=models.Count('id')
|
||||
)
|
||||
|
||||
# 构建目标ID到计数的映射
|
||||
count_dict = {str(item['target_id']): item['count'] for item in mapping_counts}
|
||||
|
||||
# 为每个结果项添加资源计数
|
||||
for model in data_to_process:
|
||||
if isinstance(model, dict) and 'id' in model:
|
||||
model_id = str(model['id'])
|
||||
model['resource_count'] = count_dict.get(model_id, 0)
|
||||
|
||||
return result_list
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,8 @@ from common.utils.common import get_file_content
|
|||
from common.utils.logger import maxkb_logger
|
||||
from common.utils.rsa_util import rsa_long_decrypt, rsa_long_encrypt
|
||||
from common.utils.tool_code import ToolExecutor
|
||||
from system_manage.models.resource_mapping import ResourceMapping
|
||||
from system_manage.serializers.resource_mapping_serializers import ResourceMappingSerializer
|
||||
from knowledge.models import File, FileSourceType
|
||||
from maxkb.const import CONFIG, PROJECT_DIR
|
||||
from system_manage.models import AuthTargetType, WorkspaceUserResourcePermission
|
||||
|
|
@ -523,6 +525,7 @@ class ToolSerializer(serializers.Serializer):
|
|||
QuerySet(File).filter(id=tool.icon.split('/')[-1]).delete()
|
||||
QuerySet(WorkspaceUserResourcePermission).filter(target=tool.id).delete()
|
||||
QuerySet(Tool).filter(id=self.data.get('id')).delete()
|
||||
ResourceMapping.objects.filter(target_id=self.data.get('id')).delete()
|
||||
|
||||
def one(self):
|
||||
self.is_one_valid(raise_exception=True)
|
||||
|
|
@ -964,8 +967,7 @@ class ToolTreeSerializer(serializers.Serializer):
|
|||
|
||||
workspace_manage = is_workspace_manage(self.data.get('user_id'), self.data.get('workspace_id'))
|
||||
is_x_pack_ee = self.is_x_pack_ee()
|
||||
|
||||
return native_page_search(
|
||||
result = native_page_search(
|
||||
current_page, page_size, self.get_query_set(workspace_manage, is_x_pack_ee),
|
||||
get_file_content(
|
||||
os.path.join(
|
||||
|
|
@ -982,6 +984,7 @@ class ToolTreeSerializer(serializers.Serializer):
|
|||
'init_field_list': json.loads(record.get('init_field_list', '[]')),
|
||||
},
|
||||
)
|
||||
return ResourceMappingSerializer().get_resource_count(result)
|
||||
|
||||
def get_tools(self):
|
||||
self.is_valid(raise_exception=True)
|
||||
|
|
|
|||
Loading…
Reference in New Issue