Skip to content

Commit 89e5d02

Browse files
authored
Update unique judgment logic for dict data (#859)
1 parent a93973a commit 89e5d02

File tree

3 files changed

+12
-10
lines changed

3 files changed

+12
-10
lines changed

backend/plugin/dict/crud/crud_dict_data.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
from collections.abc import Sequence
22

3-
from sqlalchemy import Select
3+
from sqlalchemy import Select, and_
44
from sqlalchemy.ext.asyncio import AsyncSession
55
from sqlalchemy_crud_plus import CRUDPlus
66

@@ -79,15 +79,16 @@ async def get_select(
7979

8080
return await self.select_order('id', 'desc', load_strategies={'type': 'noload'}, **filters)
8181

82-
async def get_by_label(self, db: AsyncSession, label: str) -> DictData | None:
82+
async def get_by_label_and_type_code(self, db: AsyncSession, label: str, type_code: str) -> DictData | None:
8383
"""
8484
通过标签获取字典数据
8585
8686
:param db: 数据库会话
8787
:param label: 字典标签
88+
:param type_code: 字典类型编码
8889
:return:
8990
"""
90-
return await self.select_model_by_column(db, label=label)
91+
return await self.select_model_by_column(db, and_(self.model.label == label, self.model.type_code == type_code))
9192

9293
async def create(self, db: AsyncSession, obj: CreateDictDataParam, type_code: str) -> None:
9394
"""

backend/plugin/dict/plugin.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[plugin]
22
summary = '数据字典'
3-
version = '0.0.6'
3+
version = '0.0.7'
44
description = '通常用于约束前端工程数据展示'
55
author = 'wu-clan'
66

backend/plugin/dict/service/dict_data_service.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -94,13 +94,12 @@ async def create(*, db: AsyncSession, obj: CreateDictDataParam) -> None:
9494
:param obj: 字典数据创建参数
9595
:return:
9696
"""
97-
98-
dict_data = await dict_data_dao.get_by_label(db, obj.label)
99-
if dict_data:
100-
raise errors.ConflictError(msg='字典数据已存在')
10197
dict_type = await dict_type_dao.get(db, obj.type_id)
10298
if not dict_type:
10399
raise errors.NotFoundError(msg='字典类型不存在')
100+
dict_data = await dict_data_dao.get_by_label_and_type_code(db, obj.label, dict_type.code)
101+
if dict_data:
102+
raise errors.ConflictError(msg='字典数据已存在')
104103
await dict_data_dao.create(db, obj, dict_type.code)
105104

106105
@staticmethod
@@ -117,11 +116,13 @@ async def update(*, db: AsyncSession, pk: int, obj: UpdateDictDataParam) -> int:
117116
dict_data = await dict_data_dao.get(db, pk)
118117
if not dict_data:
119118
raise errors.NotFoundError(msg='字典数据不存在')
120-
if dict_data.label != obj.label and await dict_data_dao.get_by_label(db, obj.label):
121-
raise errors.ConflictError(msg='字典数据已存在')
122119
dict_type = await dict_type_dao.get(db, obj.type_id)
123120
if not dict_type:
124121
raise errors.NotFoundError(msg='字典类型不存在')
122+
if dict_data.label != obj.label and await dict_data_dao.get_by_label_and_type_code(
123+
db, obj.label, dict_type.code
124+
):
125+
raise errors.ConflictError(msg='字典数据已存在')
125126
count = await dict_data_dao.update(db, pk, obj, dict_type.code)
126127
return count
127128

0 commit comments

Comments
 (0)