Skip to content

Commit 4b7d270

Browse files
committed
fix(Terminology Configuration): Term name, synonyms cannot be repeated
1 parent 8f7b457 commit 4b7d270

File tree

4 files changed

+42
-7
lines changed

4 files changed

+42
-7
lines changed

backend/apps/terminology/api/terminology.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@
1313
@router.get("/page/{current_page}/{page_size}")
1414
async def pager(session: SessionDep, current_user: CurrentUser, current_page: int, page_size: int,
1515
word: Optional[str] = Query(None, description="搜索术语(可选)")):
16-
current_page, page_size, total_count, total_pages, _list = page_terminology(session, current_page, page_size, word, current_user.oid)
16+
current_page, page_size, total_count, total_pages, _list = page_terminology(session, current_page, page_size, word,
17+
current_user.oid)
1718

1819
return {
1920
"current_page": current_page,
@@ -30,7 +31,7 @@ async def create_or_update(session: SessionDep, current_user: CurrentUser, trans
3031
if info.id:
3132
return update_terminology(session, info, oid, trans)
3233
else:
33-
return create_terminology(session, info, oid)
34+
return create_terminology(session, info, oid, trans)
3435

3536

3637
@router.delete("")

backend/apps/terminology/curd/terminology.py

Lines changed: 33 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -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

backend/locales/en.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838
"invalid_origin": "Domain verification failed [{origin}]"
3939
},
4040
"i18n_terminology": {
41-
"terminology_not_exists": "Terminology does not exists"
41+
"terminology_not_exists": "Terminology does not exists",
42+
"cannot_be_repeated": "Term name, synonyms cannot be repeated",
43+
"exists_in_db": "Term name, synonyms exists"
4244
}
4345
}

backend/locales/zh-CN.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838
"invalid_origin": "域名校验失败【{origin}】"
3939
},
4040
"i18n_terminology": {
41-
"terminology_not_exists": "该术语不存在"
41+
"terminology_not_exists": "该术语不存在",
42+
"cannot_be_repeated": "术语名称,同义词不能重复",
43+
"exists_in_db": "术语名称,同义词已存在"
4244
}
4345
}

0 commit comments

Comments
 (0)