diff --git a/backend/app/admin/model/role.py b/backend/app/admin/model/role.py index e3ed954d..f21f820c 100644 --- a/backend/app/admin/model/role.py +++ b/backend/app/admin/model/role.py @@ -10,9 +10,15 @@ class Role(Base, TenantMixin): """角色表""" __tablename__ = 'sys_role' - __table_args__ = ( - sa.UniqueConstraint('name', *(['tenant_id'] if settings.TENANT_ENABLED else []), name='uk_sys_role_name'), - ) + + if settings.TENANT_ENABLED: + __table_args__ = ( + sa.UniqueConstraint('name', 'tenant_id'), + ) + else: + __table_args__ = ( + sa.UniqueConstraint('name'), + ) id: Mapped[id_key] = mapped_column(init=False) name: Mapped[str] = mapped_column(sa.String(32), comment='角色名称') diff --git a/backend/app/admin/model/user.py b/backend/app/admin/model/user.py index 6a8ea389..d6701b86 100644 --- a/backend/app/admin/model/user.py +++ b/backend/app/admin/model/user.py @@ -14,14 +14,17 @@ class User(Base, TenantMixin): """用户表""" __tablename__ = 'sys_user' - __table_args__ = ( - sa.UniqueConstraint( - 'username', - *(['tenant_id'] if settings.TENANT_ENABLED else []), - name='uk_sys_user_username', - ), - sa.UniqueConstraint('email', *(['tenant_id'] if settings.TENANT_ENABLED else []), name='uk_sys_user_email'), - ) + + if settings.TENANT_ENABLED: + __table_args__ = ( + sa.UniqueConstraint('username', 'tenant_id'), + sa.UniqueConstraint('email', 'tenant_id'), + ) + else: + __table_args__ = ( + sa.UniqueConstraint('username'), + sa.UniqueConstraint('email'), + ) id: Mapped[id_key] = mapped_column(init=False) uuid: Mapped[str] = mapped_column(sa.String(64), init=False, default_factory=uuid4_str, unique=True) diff --git a/backend/utils/dynamic_import.py b/backend/utils/dynamic_import.py index e8885091..51ebbd54 100644 --- a/backend/utils/dynamic_import.py +++ b/backend/utils/dynamic_import.py @@ -3,15 +3,10 @@ import inspect import os.path from functools import lru_cache -from typing import Any, TypeVar +from typing import Any import sqlalchemy as sa -from backend.common.exception import errors -from backend.common.log import log - -T = TypeVar('T') - @lru_cache(maxsize=128) def import_module_cached(module_path: str) -> Any: @@ -24,22 +19,6 @@ def import_module_cached(module_path: str) -> Any: return importlib.import_module(module_path) -def dynamic_import_data_model(module_path: str) -> type[T]: - """ - 动态导入数据模型 - - :param module_path: 模块路径,格式为 'module_path.class_name' - :return: - """ - try: - module_path, class_name = module_path.rsplit('.', 1) - module = import_module_cached(module_path) - return getattr(module, class_name) - except Exception as e: - log.error(f'动态导入数据模型失败:{e}') - raise errors.ServerError(msg='数据模型列动态解析失败,请联系系统超级管理员') - - def get_model_objects(module_path: str) -> list[object] | None: """ 获取模型对象