@@ -62,7 +62,6 @@ def page_terminology(session: SessionDep, current_page: int = 1, page_size: int
6262 if current_page > total_pages :
6363 current_page = 1
6464
65-
6665 # 步骤3:获取分页后的父节点ID
6766 paginated_parent_ids = (
6867 parent_ids_subquery
@@ -147,10 +146,22 @@ def page_terminology(session: SessionDep, current_page: int = 1, page_size: int
147146 return current_page , page_size , total_count , total_pages , _list
148147
149148
150- def create_terminology (session : SessionDep , info : TerminologyInfo , oid : int ):
149+ def create_terminology (session : SessionDep , info : TerminologyInfo , oid : int , trans : Trans ):
151150 create_time = datetime .datetime .now ()
152151 parent = Terminology (word = info .word , create_time = create_time , description = info .description , oid = oid )
153152
153+ words = [info .word ]
154+ for child in info .other_words :
155+ if child in words :
156+ raise Exception (trans ("i18n_terminology.cannot_be_repeated" ))
157+ else :
158+ words .append (child )
159+
160+ exists = session .query (
161+ session .query (Terminology ).filter (and_ (Terminology .word .in_ (words ), Terminology .oid == oid )).exists ()).scalar ()
162+ if exists :
163+ raise Exception (trans ("i18n_terminology.exists_in_db" ))
164+
154165 result = Terminology (** parent .model_dump ())
155166
156167 session .add (parent )
@@ -185,6 +196,26 @@ def update_terminology(session: SessionDep, info: TerminologyInfo, oid: int, tra
185196 if count == 0 :
186197 raise Exception (trans ('i18n_terminology.terminology_not_exists' ))
187198
199+ words = [info .word ]
200+ for child in info .other_words :
201+ if child in words :
202+ raise Exception (trans ("i18n_terminology.cannot_be_repeated" ))
203+ else :
204+ words .append (child )
205+
206+ exists = session .query (
207+ session .query (Terminology ).filter (
208+ Terminology .word .in_ (words ),
209+ Terminology .oid == oid ,
210+ or_ (
211+ Terminology .pid != info .id ,
212+ and_ (Terminology .pid .is_ (None ), Terminology .id != info .id )
213+ ),
214+ Terminology .id != info .id
215+ ).exists ()).scalar ()
216+ if exists :
217+ raise Exception (trans ("i18n_terminology.exists_in_db" ))
218+
188219 stmt = update (Terminology ).where (and_ (Terminology .id == info .id )).values (
189220 word = info .word ,
190221 description = info .description ,
@@ -211,7 +242,6 @@ def update_terminology(session: SessionDep, info: TerminologyInfo, oid: int, tra
211242 # embedding
212243 run_save_embeddings ([info .id ])
213244
214-
215245 return info .id
216246
217247
0 commit comments