fix: 删除用户报错
This commit is contained in:
parent
ee270a8fa9
commit
d59aac4a2a
@ -67,6 +67,7 @@ class ListenerManagement:
|
|||||||
sync_web_document_signal = signal('sync_web_document')
|
sync_web_document_signal = signal('sync_web_document')
|
||||||
update_problem_signal = signal('update_problem')
|
update_problem_signal = signal('update_problem')
|
||||||
delete_embedding_by_source_ids_signal = signal('delete_embedding_by_source_ids')
|
delete_embedding_by_source_ids_signal = signal('delete_embedding_by_source_ids')
|
||||||
|
delete_embedding_by_dataset_id_list_signal = signal("delete_embedding_by_dataset_id_list")
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def embedding_by_problem(args):
|
def embedding_by_problem(args):
|
||||||
@ -208,6 +209,10 @@ class ListenerManagement:
|
|||||||
def delete_embedding_by_source_ids(source_ids: List[str]):
|
def delete_embedding_by_source_ids(source_ids: List[str]):
|
||||||
VectorStore.get_embedding_vector().delete_by_source_ids(source_ids, SourceType.PROBLEM)
|
VectorStore.get_embedding_vector().delete_by_source_ids(source_ids, SourceType.PROBLEM)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def delete_embedding_by_dataset_id_list(source_ids: List[str]):
|
||||||
|
VectorStore.get_embedding_vector().delete_by_dataset_id_list(source_ids)
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
@poxy
|
@poxy
|
||||||
def init_embedding_model(ags):
|
def init_embedding_model(ags):
|
||||||
@ -248,3 +253,4 @@ class ListenerManagement:
|
|||||||
# 更新问题向量
|
# 更新问题向量
|
||||||
ListenerManagement.update_problem_signal.connect(self.update_problem)
|
ListenerManagement.update_problem_signal.connect(self.update_problem)
|
||||||
ListenerManagement.delete_embedding_by_source_ids_signal.connect(self.delete_embedding_by_source_ids)
|
ListenerManagement.delete_embedding_by_source_ids_signal.connect(self.delete_embedding_by_source_ids)
|
||||||
|
ListenerManagement.delete_embedding_by_dataset_id_list_signal.connect(self.delete_embedding_by_dataset_id_list)
|
||||||
|
|||||||
@ -588,6 +588,7 @@ class DataSetSerializers(serializers.ModelSerializer):
|
|||||||
self.is_valid()
|
self.is_valid()
|
||||||
dataset = QuerySet(DataSet).get(id=self.data.get("id"))
|
dataset = QuerySet(DataSet).get(id=self.data.get("id"))
|
||||||
QuerySet(Document).filter(dataset=dataset).delete()
|
QuerySet(Document).filter(dataset=dataset).delete()
|
||||||
|
QuerySet(ProblemParagraphMapping).filter(dataset=dataset).delete()
|
||||||
QuerySet(Paragraph).filter(dataset=dataset).delete()
|
QuerySet(Paragraph).filter(dataset=dataset).delete()
|
||||||
QuerySet(Problem).filter(dataset=dataset).delete()
|
QuerySet(Problem).filter(dataset=dataset).delete()
|
||||||
dataset.delete()
|
dataset.delete()
|
||||||
|
|||||||
@ -155,6 +155,10 @@ class BaseVectorStore(ABC):
|
|||||||
def delete_bu_document_id_list(self, document_id_list: List[str]):
|
def delete_bu_document_id_list(self, document_id_list: List[str]):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@abstractmethod
|
||||||
|
def delete_by_dataset_id_list(self, dataset_id_list: List[str]):
|
||||||
|
pass
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def delete_by_source_id(self, source_id: str, source_type: str):
|
def delete_by_source_id(self, source_id: str, source_type: str):
|
||||||
pass
|
pass
|
||||||
|
|||||||
@ -125,6 +125,9 @@ class PGVector(BaseVectorStore):
|
|||||||
def delete_by_dataset_id(self, dataset_id: str):
|
def delete_by_dataset_id(self, dataset_id: str):
|
||||||
QuerySet(Embedding).filter(dataset_id=dataset_id).delete()
|
QuerySet(Embedding).filter(dataset_id=dataset_id).delete()
|
||||||
|
|
||||||
|
def delete_by_dataset_id_list(self, dataset_id_list: List[str]):
|
||||||
|
QuerySet(Embedding).filter(dataset_id__in=dataset_id_list).delete()
|
||||||
|
|
||||||
def delete_by_document_id(self, document_id: str):
|
def delete_by_document_id(self, document_id: str):
|
||||||
QuerySet(Embedding).filter(document_id=document_id).delete()
|
QuerySet(Embedding).filter(document_id=document_id).delete()
|
||||||
return True
|
return True
|
||||||
|
|||||||
@ -20,16 +20,19 @@ from django.db.models import Q, QuerySet
|
|||||||
from drf_yasg import openapi
|
from drf_yasg import openapi
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
|
|
||||||
|
from application.models import Application
|
||||||
from common.constants.authentication_type import AuthenticationType
|
from common.constants.authentication_type import AuthenticationType
|
||||||
from common.constants.exception_code_constants import ExceptionCodeConstants
|
from common.constants.exception_code_constants import ExceptionCodeConstants
|
||||||
from common.constants.permission_constants import RoleConstants, get_permission_list_by_role
|
from common.constants.permission_constants import RoleConstants, get_permission_list_by_role
|
||||||
from common.db.search import page_search
|
from common.db.search import page_search
|
||||||
|
from common.event import ListenerManagement
|
||||||
from common.exception.app_exception import AppApiException
|
from common.exception.app_exception import AppApiException
|
||||||
from common.mixins.api_mixin import ApiMixin
|
from common.mixins.api_mixin import ApiMixin
|
||||||
from common.response.result import get_api_response
|
from common.response.result import get_api_response
|
||||||
from common.util.field_message import ErrMessage
|
from common.util.field_message import ErrMessage
|
||||||
from common.util.lock import lock
|
from common.util.lock import lock
|
||||||
from setting.models import Team, SystemSetting, SettingType
|
from dataset.models import DataSet, Document, Paragraph, Problem, ProblemParagraphMapping
|
||||||
|
from setting.models import Team, SystemSetting, SettingType, Model, TeamMember, TeamMemberPermission
|
||||||
from smartdoc.conf import PROJECT_DIR
|
from smartdoc.conf import PROJECT_DIR
|
||||||
from users.models.user import User, password_encrypt, get_user_dynamics_permission
|
from users.models.user import User, password_encrypt, get_user_dynamics_permission
|
||||||
|
|
||||||
@ -700,12 +703,37 @@ class UserManageSerializer(serializers.Serializer):
|
|||||||
if not QuerySet(User).filter(id=self.data.get('id')).exists():
|
if not QuerySet(User).filter(id=self.data.get('id')).exists():
|
||||||
raise AppApiException(1004, "用户不存在")
|
raise AppApiException(1004, "用户不存在")
|
||||||
|
|
||||||
|
@transaction.atomic
|
||||||
def delete(self, with_valid=True):
|
def delete(self, with_valid=True):
|
||||||
if with_valid:
|
if with_valid:
|
||||||
self.is_valid(raise_exception=True)
|
self.is_valid(raise_exception=True)
|
||||||
user = QuerySet(User).filter(id=self.data.get('id')).first()
|
user = QuerySet(User).filter(id=self.data.get('id')).first()
|
||||||
if user.role == RoleConstants.ADMIN.name:
|
if user.role == RoleConstants.ADMIN.name:
|
||||||
raise AppApiException(1004, "无法删除管理员")
|
raise AppApiException(1004, "无法删除管理员")
|
||||||
|
user_id = self.data.get('id')
|
||||||
|
|
||||||
|
team_member_list = QuerySet(TeamMember).filter(team_id=user_id)
|
||||||
|
# 删除团队成员权限
|
||||||
|
QuerySet(TeamMemberPermission).filter(
|
||||||
|
member_id__in=[team_member.id for team_member in team_member_list]).delete()
|
||||||
|
# 删除团队成员
|
||||||
|
team_member_list.delete()
|
||||||
|
# 删除应用相关 因为应用相关都是级联删除所以不需要手动删除
|
||||||
|
QuerySet(Application).filter(user_id=self.data.get('id')).delete()
|
||||||
|
# 删除数据集相关
|
||||||
|
dataset_list = QuerySet(DataSet).filter(user_id=self.data.get('id'))
|
||||||
|
dataset_id_list = [str(dataset.id) for dataset in dataset_list]
|
||||||
|
QuerySet(Document).filter(dataset_id__in=dataset_id_list).delete()
|
||||||
|
QuerySet(Paragraph).filter(dataset_id__in=dataset_id_list).delete()
|
||||||
|
QuerySet(ProblemParagraphMapping).filter(dataset_id__in=dataset_id_list).delete()
|
||||||
|
QuerySet(Problem).filter(dataset_id__in=dataset_id_list).delete()
|
||||||
|
ListenerManagement.delete_embedding_by_dataset_id_list_signal.send(dataset_id_list)
|
||||||
|
dataset_list.delete()
|
||||||
|
# 删除团队
|
||||||
|
QuerySet(Team).filter(user_id=self.data.get('id')).delete()
|
||||||
|
# 删除模型
|
||||||
|
QuerySet(Model).filter(user_id=self.data.get('id')).delete()
|
||||||
|
# 删除用户
|
||||||
QuerySet(User).filter(id=self.data.get('id')).delete()
|
QuerySet(User).filter(id=self.data.get('id')).delete()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user