Skip to content

Commit 944ec33

Browse files
committed
fix bugs
1 parent d4bbbc0 commit 944ec33

File tree

7 files changed

+31
-22
lines changed

7 files changed

+31
-22
lines changed

backend/app/admin/crud/crud_config.py

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,33 +24,38 @@ async def get(self, db: AsyncSession, pk: int) -> Config | None:
2424

2525
async def get_by_type(self, db: AsyncSession, type: str) -> Sequence[Config]:
2626
"""
27-
通过 type 获取系统配置参数
27+
通过 type 获取内置系统配置
2828
2929
:param db:
3030
:param type:
3131
:return:
3232
"""
3333
return await self.select_models(db, type=type)
3434

35-
async def get_by_name(self, db: AsyncSession, name: str) -> Config | None:
35+
async def get_by_key_and_type(self, db: AsyncSession, key: str, type: str) -> Config | None:
3636
"""
37-
通过 name 获取系统配置参数
37+
通过 name 和 type 获取内置系统配置
3838
3939
:param db:
40-
:param name:
40+
:param key:
41+
:param type:
4142
:return:
4243
"""
43-
return await self.select_model_by_column(db, name=name, type__not_in=admin_settings.CONFIG_BUILT_IN_TYPES)
44+
return await self.select_model_by_column(db, key=key, type=type)
4445

45-
async def get_by_key(self, db: AsyncSession, key: str) -> Config | None:
46+
async def get_by_key(self, db: AsyncSession, key: str, built_in: bool = False) -> Config | None:
4647
"""
4748
通过 key 获取系统配置参数
4849
4950
:param db:
5051
:param key:
52+
:param built_in:
5153
:return:
5254
"""
53-
return await self.select_model_by_column(db, key=key, type__not_in=admin_settings.CONFIG_BUILT_IN_TYPES)
55+
filters = {'key': key}
56+
if not built_in:
57+
filters.update({'type__not_in': admin_settings.CONFIG_BUILT_IN_TYPES})
58+
return await self.select_model_by_column(db, **filters)
5459

5560
async def get_list(self, name: str = None, type: str = None) -> Select:
5661
"""
@@ -60,7 +65,7 @@ async def get_list(self, name: str = None, type: str = None) -> Select:
6065
:param type:
6166
:return:
6267
"""
63-
filters = {'name__not_in': admin_settings.CONFIG_BUILT_IN_TYPES}
68+
filters = {'type__not_in': admin_settings.CONFIG_BUILT_IN_TYPES}
6469
if name is not None:
6570
filters.update(name__like=f'%{name}%')
6671
if type is not None:
@@ -96,7 +101,9 @@ async def delete(self, db: AsyncSession, pk: list[int]) -> int:
96101
:param pk:
97102
:return:
98103
"""
99-
return await self.delete_model_by_column(db, allow_multiple=True, id__in=pk)
104+
return await self.delete_model_by_column(
105+
db, allow_multiple=True, id__in=pk, type__not_in=admin_settings.CONFIG_BUILT_IN_TYPES
106+
)
100107

101108

102109
config_dao: CRUDConfig = CRUDConfig(Config)

backend/app/admin/model/sys_config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class Config(Base):
1313
__tablename__ = 'sys_config'
1414

1515
id: Mapped[id_key] = mapped_column(init=False)
16-
name: Mapped[str] = mapped_column(String(20), unique=True, comment='名称')
16+
name: Mapped[str] = mapped_column(String(20), comment='名称')
1717
type: Mapped[str | None] = mapped_column(String(20), server_default=None, comment='类型')
1818
key: Mapped[str] = mapped_column(String(50), unique=True, comment='键名')
1919
value: Mapped[str] = mapped_column(LONGTEXT, comment='键值')

backend/app/admin/schema/config.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class AnyConfigSchemaBase(SchemaBase):
1919
key: str
2020
value: str
2121
is_frontend: bool
22-
remark: str
22+
remark: str | None
2323

2424

2525
class CreateAnyConfigParam(AnyConfigSchemaBase):

backend/app/admin/service/config_service.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,11 @@ async def get_built_in_config(type: str) -> Sequence[Config]:
2626
async def save_built_in_config(objs: list[SaveConfigParam], type: str) -> None:
2727
async with async_db_session.begin() as db:
2828
for obj in objs:
29-
config = await config_dao.get_by_name(db, obj.name)
29+
config = await config_dao.get_by_key_and_type(db, obj.key, type)
3030
if config is None:
31-
await config_dao.create_model(db, obj, type=type)
31+
if await config_dao.get_by_key(db, obj.key, built_in=True):
32+
raise errors.ForbiddenError(msg=f'参数配置 {obj.key} 已存在')
33+
await config_dao.create_model(db, obj, flush=True, type=type)
3234
else:
3335
await config_dao.update_model(db, config.id, obj, type=type)
3436

@@ -47,11 +49,11 @@ async def get_select(*, name: str = None, type: str = None) -> Select:
4749
@staticmethod
4850
async def create(*, obj: CreateAnyConfigParam) -> None:
4951
async with async_db_session.begin() as db:
50-
config = await config_dao.get_by_name(db, obj.name) or config_dao.get_by_key(db, obj.key)
51-
if config:
52-
raise errors.ForbiddenError(msg='参数配置已存在')
5352
if obj.type in admin_settings.CONFIG_BUILT_IN_TYPES:
5453
raise errors.ForbiddenError(msg='非法类型参数')
54+
config = await config_dao.get_by_key(db, obj.key)
55+
if config:
56+
raise errors.ForbiddenError(msg=f'参数配置 {obj.key} 已存在')
5557
await config_dao.create(db, obj)
5658

5759
@staticmethod

backend/pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ dependencies = [
4444
"XdbSearchIP==1.0.2",
4545
"fastapi_oauth20>=0.0.1a2",
4646
"flower==2.0.1",
47-
"sqlalchemy-crud-plus==1.5.0",
47+
"sqlalchemy-crud-plus==1.6.0",
4848
"jinja2==3.1.4",
4949
"aiofiles==24.1.0",
5050
# When celery version < 6.0.0

backend/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ simpleeval==1.0.0
9999
six==1.16.0
100100
sniffio==1.3.1
101101
sqlalchemy==2.0.30
102-
sqlalchemy-crud-plus==1.5.0
102+
sqlalchemy-crud-plus==1.6.0
103103
starlette==0.37.2
104104
tomli==2.0.2 ; python_full_version < '3.11'
105105
tornado==6.4.1

backend/uv.lock

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)