88"""
99import os
1010import uuid
11- from typing import Dict
11+ from typing import Dict , List
1212
1313from django .db import transaction
1414from django .db .models import QuerySet
@@ -83,6 +83,7 @@ def get_query_set(self):
8383 ** {'dataset_id' : self .data .get ('dataset_id' )})
8484 if 'content' in self .data :
8585 query_set = query_set .filter (** {'content__contains' : self .data .get ('content' )})
86+ query_set = query_set .order_by ("-create_time" )
8687 return query_set
8788
8889 def list (self ):
@@ -95,6 +96,22 @@ def page(self, current_page, page_size):
9596 return native_page_search (current_page , page_size , query_set , select_string = get_file_content (
9697 os .path .join (PROJECT_DIR , "apps" , "dataset" , 'sql' , 'list_problem.sql' )))
9798
99+ class BatchOperate (serializers .Serializer ):
100+ dataset_id = serializers .UUIDField (required = True , error_messages = ErrMessage .uuid ("知识库id" ))
101+
102+ def delete (self , problem_id_list : List , with_valid = True ):
103+ if with_valid :
104+ self .is_valid (raise_exception = True )
105+ dataset_id = self .data .get ('dataset_id' )
106+ problem_paragraph_mapping_list = QuerySet (ProblemParagraphMapping ).filter (
107+ dataset_id = dataset_id ,
108+ problem_id__in = problem_id_list )
109+ source_ids = [row .id for row in problem_paragraph_mapping_list ]
110+ problem_paragraph_mapping_list .delete ()
111+ QuerySet (Problem ).filter (id__in = problem_id_list ).delete ()
112+ ListenerManagement .delete_embedding_by_source_ids_signal .send (source_ids )
113+ return True
114+
98115 class Operate (serializers .Serializer ):
99116 dataset_id = serializers .UUIDField (required = True , error_messages = ErrMessage .uuid ("知识库id" ))
100117
@@ -105,6 +122,8 @@ def list_paragraph(self, with_valid=True):
105122 self .is_valid (raise_exception = True )
106123 problem_paragraph_mapping = QuerySet (ProblemParagraphMapping ).filter (dataset_id = self .data .get ("dataset_id" ),
107124 problem_id = self .data .get ("problem_id" ))
125+ if problem_paragraph_mapping is None or len (problem_paragraph_mapping )== 0 :
126+ return []
108127 return native_search (
109128 QuerySet (Paragraph ).filter (id__in = [row .paragraph_id for row in problem_paragraph_mapping ]),
110129 select_string = get_file_content (
@@ -123,6 +142,7 @@ def delete(self, with_valid=True):
123142 dataset_id = self .data .get ('dataset_id' ),
124143 problem_id = self .data .get ('problem_id' ))
125144 source_ids = [row .id for row in problem_paragraph_mapping_list ]
145+ problem_paragraph_mapping_list .delete ()
126146 QuerySet (Problem ).filter (id = self .data .get ('problem_id' )).delete ()
127147 ListenerManagement .delete_embedding_by_source_ids_signal .send (source_ids )
128148 return True
0 commit comments