From f93c9f5cd2ec059ed2316801da693fac4653698e Mon Sep 17 00:00:00 2001 From: lixinyue <2569494688@qq.com> Date: Mon, 9 Feb 2026 21:02:41 +0800 Subject: [PATCH] bug/config_id --- api/app/utils/config_utils.py | 56 ++++++++++++++++++----------------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/api/app/utils/config_utils.py b/api/app/utils/config_utils.py index 55cfe8a3..eee5c233 100644 --- a/api/app/utils/config_utils.py +++ b/api/app/utils/config_utils.py @@ -28,33 +28,7 @@ def resolve_config_id(config_id: UUID | int | str, db: Session) -> UUID: if isinstance(config_id, UUID): return config_id - # 2. 如果是字符串类型 - if isinstance(config_id, str): - config_id_stripped = config_id.strip() - - # 2.1 尝试解析为 UUID(标准 UUID 字符串长度为 36) - try: - return uuid_module.UUID(config_id_stripped) - except ValueError: - pass - - # 2.2 尝试解析为整数(用于查询 config_id_old) - try: - old_id = int(config_id_stripped) - if old_id > 0: - memory_config = db.query(MemoryConfig).filter( - MemoryConfig.config_id_old == old_id - ).first() - if not memory_config: - raise ValueError(f"未找到 config_id_old={old_id} 对应的配置") - return memory_config.config_id - except ValueError: - pass - - # 2.3 无法解析的字符串格式 - raise ValueError(f"无效的 config_id 格式: '{config_id}'(必须是 UUID 或正整数)") - - # 3. 如果是整数类型,通过 config_id_old 查找 + # 2. 如果是整数类型,通过 config_id_old 查找 if isinstance(config_id, int): if config_id <= 0: raise ValueError(f"config_id 必须是正整数: {config_id}") @@ -67,6 +41,34 @@ def resolve_config_id(config_id: UUID | int | str, db: Session) -> UUID: raise ValueError(f"未找到 config_id_old={config_id} 对应的配置") return memory_config.config_id + + # 3. 如果是字符串类型 + if isinstance(config_id, str): + config_id_stripped = config_id.strip() + + # 3.1 先尝试解析为整数(用于查询 config_id_old) + # 这样可以处理 "17" 这样的字符串 + try: + old_id = int(config_id_stripped) + if old_id > 0: + memory_config = db.query(MemoryConfig).filter( + MemoryConfig.config_id_old == old_id + ).first() + if not memory_config: + raise ValueError(f"未找到 config_id_old={old_id} 对应的配置") + return memory_config.config_id + except ValueError: + # 不是整数,继续尝试 UUID + pass + + # 3.2 尝试解析为 UUID + try: + return uuid_module.UUID(config_id_stripped) + except ValueError: + pass + + # 3.3 无法解析的字符串格式 + raise ValueError(f"无效的 config_id 格式: '{config_id}'(必须是 UUID 或正整数)") # 4. 不支持的类型 raise ValueError(f"不支持的 config_id 类型: {type(config_id).__name__}")