66from celery_once import AlreadyQueued
77from django .db import transaction
88from django .db .models import QuerySet , Count , F
9- from django .db .models .aggregates import Max
109from django .utils .translation import gettext_lazy as _
1110from rest_framework import serializers
1211
@@ -67,12 +66,19 @@ class ParagraphSerializers(serializers.Serializer):
6766 content = serializers .CharField (required = True , max_length = 102400 , label = _ ('section title' ))
6867
6968 class Problem (serializers .Serializer ):
69+ workspace_id = serializers .CharField (required = True , label = _ ('workspace id' ))
7070 knowledge_id = serializers .UUIDField (required = True , label = _ ('knowledge id' ))
7171 document_id = serializers .UUIDField (required = True , label = _ ('document id' ))
7272 paragraph_id = serializers .UUIDField (required = True , label = _ ('paragraph id' ))
7373
7474 def is_valid (self , * , raise_exception = False ):
7575 super ().is_valid (raise_exception = True )
76+ workspace_id = self .data .get ('workspace_id' )
77+ query_set = QuerySet (Knowledge ).filter (id = self .data .get ('knowledge_id' ))
78+ if workspace_id :
79+ query_set = query_set .filter (workspace_id = workspace_id )
80+ if not query_set .exists ():
81+ raise AppApiException (500 , _ ('Knowledge id does not exist' ))
7682 if not QuerySet (Paragraph ).filter (id = self .data .get ('paragraph_id' )).exists ():
7783 raise AppApiException (500 , _ ('Paragraph id does not exist' ))
7884
@@ -127,7 +133,11 @@ def save(self, instance: Dict, with_valid=True, with_embedding=True, embedding_b
127133 }, model_id )
128134
129135 return ProblemSerializers .Operate (
130- data = {'knowledge_id' : self .data .get ('knowledge_id' ), 'problem_id' : problem .id }
136+ data = {
137+ 'workspace_id' : self .data .get ('workspace_id' ),
138+ 'knowledge_id' : self .data .get ('knowledge_id' ),
139+ 'problem_id' : problem .id
140+ }
131141 ).one (with_valid = True )
132142
133143 class Operate (serializers .Serializer ):
@@ -141,6 +151,12 @@ class Operate(serializers.Serializer):
141151
142152 def is_valid (self , * , raise_exception = True ):
143153 super ().is_valid (raise_exception = True )
154+ workspace_id = self .data .get ('workspace_id' )
155+ query_set = QuerySet (Knowledge ).filter (id = self .data .get ('knowledge_id' ))
156+ if workspace_id :
157+ query_set = query_set .filter (workspace_id = workspace_id )
158+ if not query_set .exists ():
159+ raise AppApiException (500 , _ ('Knowledge id does not exist' ))
144160 if not QuerySet (Paragraph ).filter (id = self .data .get ('paragraph_id' )).exists ():
145161 raise AppApiException (500 , _ ('Paragraph id does not exist' ))
146162
@@ -321,11 +337,21 @@ def or_get(exists_problem_list, content, knowledge_id):
321337 return Problem (id = uuid .uuid7 (), content = content , knowledge_id = knowledge_id )
322338
323339 class Query (serializers .Serializer ):
340+ workspace_id = serializers .CharField (required = True , label = _ ('workspace id' ))
324341 knowledge_id = serializers .UUIDField (required = True , label = _ ('knowledge id' ))
325342 document_id = serializers .UUIDField (required = True , label = _ ('document id' ))
326343 title = serializers .CharField (required = False , label = _ ('section title' ))
327344 content = serializers .CharField (required = False )
328345
346+ def is_valid (self , * , raise_exception = False ):
347+ super ().is_valid (raise_exception = True )
348+ workspace_id = self .data .get ('workspace_id' )
349+ query_set = QuerySet (Knowledge ).filter (id = self .data .get ('knowledge_id' ))
350+ if workspace_id :
351+ query_set = query_set .filter (workspace_id = workspace_id )
352+ if not query_set .exists ():
353+ raise AppApiException (500 , _ ('Knowledge id does not exist' ))
354+
329355 def get_query_set (self ):
330356 query_set = QuerySet (model = Paragraph )
331357 query_set = query_set .filter (
@@ -357,6 +383,12 @@ def is_valid(self, *, raise_exception=True):
357383 knowledge_id = self .data .get ('knowledge_id' )
358384 paragraph_id = self .data .get ('paragraph_id' )
359385 problem_id = self .data .get ("problem_id" )
386+ workspace_id = self .data .get ('workspace_id' )
387+ query_set = QuerySet (Knowledge ).filter (id = self .data .get ('knowledge_id' ))
388+ if workspace_id :
389+ query_set = query_set .filter (workspace_id = workspace_id )
390+ if not query_set .exists ():
391+ raise AppApiException (500 , _ ('Knowledge id does not exist' ))
360392 if not QuerySet (Paragraph ).filter (knowledge_id = knowledge_id , id = paragraph_id ).exists ():
361393 raise AppApiException (500 , _ ('Paragraph does not exist' ))
362394 if not QuerySet (Problem ).filter (knowledge_id = knowledge_id , id = problem_id ).exists ():
@@ -398,9 +430,19 @@ def un_association(self, with_valid=True):
398430 return True
399431
400432 class Batch (serializers .Serializer ):
433+ workspace_id = serializers .CharField (required = False , label = _ ('workspace id' ))
401434 knowledge_id = serializers .UUIDField (required = True , label = _ ('knowledge id' ))
402435 document_id = serializers .UUIDField (required = True , label = _ ('document id' ))
403436
437+ def is_valid (self , * , raise_exception = False ):
438+ super ().is_valid (raise_exception = True )
439+ workspace_id = self .data .get ('workspace_id' )
440+ query_set = QuerySet (Knowledge ).filter (id = self .data .get ('knowledge_id' ))
441+ if workspace_id :
442+ query_set = query_set .filter (workspace_id = workspace_id )
443+ if not query_set .exists ():
444+ raise AppApiException (500 , _ ('Knowledge id does not exist' ))
445+
404446 @transaction .atomic
405447 def batch_delete (self , instance : Dict , with_valid = True ):
406448 if with_valid :
@@ -448,6 +490,12 @@ class Migrate(serializers.Serializer):
448490
449491 def is_valid (self , * , raise_exception = False ):
450492 super ().is_valid (raise_exception = True )
493+ workspace_id = self .data .get ('workspace_id' )
494+ query_set = QuerySet (Knowledge ).filter (id = self .data .get ('knowledge_id' ))
495+ if workspace_id :
496+ query_set = query_set .filter (workspace_id = workspace_id )
497+ if not query_set .exists ():
498+ raise AppApiException (500 , _ ('Knowledge id does not exist' ))
451499 document_list = QuerySet (Document ).filter (
452500 id__in = [self .data .get ('document_id' ), self .data .get ('target_document_id' )])
453501 document_id = self .data .get ('document_id' )
@@ -589,6 +637,15 @@ class AdjustPosition(serializers.Serializer):
589637 document_id = serializers .UUIDField (required = True , label = _ ('document id' ))
590638 paragraph_id = serializers .UUIDField (required = True , label = _ ('paragraph id' ))
591639
640+ def is_valid (self , * , raise_exception = False ):
641+ super ().is_valid (raise_exception = True )
642+ workspace_id = self .data .get ('workspace_id' )
643+ query_set = QuerySet (Knowledge ).filter (id = self .data .get ('knowledge_id' ))
644+ if workspace_id :
645+ query_set = query_set .filter (workspace_id = workspace_id )
646+ if not query_set .exists ():
647+ raise AppApiException (500 , _ ('Knowledge id does not exist' ))
648+
592649 @transaction .atomic
593650 def adjust_position (self , new_position ):
594651 """
0 commit comments