fix(model): fix issue where associated model config status was not updated when deleting API Key

When deleting an API Key, check if the associated model configuration has other active keys; if not, automatically set it to inactive.
Also optimize the model configuration query method to support multi-type queries and add sorting conditions.
This commit is contained in:
wwq
2026-04-16 13:35:35 +08:00
parent 1faa258e23
commit b59e2b5bcd
2 changed files with 25 additions and 13 deletions

View File

@@ -263,16 +263,15 @@ class ModelConfigRepository:
raise raise
@staticmethod @staticmethod
def get_by_type(db: Session, model_type: ModelType, tenant_id: uuid.UUID | None = None, is_active: bool = True) -> List[ModelConfig]: def get_by_type(db: Session, model_types: List[ModelType], tenant_id: uuid.UUID | None = None, is_active: bool = True) -> List[ModelConfig]:
"""根据类型获取模型配置""" """根据类型获取模型配置,支持多类型查询"""
db_logger.debug(f"根据类型查询模型配置: type={model_type}, tenant_id={tenant_id}, is_active={is_active}") db_logger.debug(f"根据类型查询模型配置: types={[t.value for t in model_types]}, tenant_id={tenant_id}, is_active={is_active}")
try: try:
query = db.query(ModelConfig).options( query = db.query(ModelConfig).options(
joinedload(ModelConfig.api_keys) joinedload(ModelConfig.api_keys)
).filter(ModelConfig.type == model_type) ).filter(ModelConfig.type.in_([t.value for t in model_types]))
# 添加租户过滤
if tenant_id: if tenant_id:
query = query.filter( query = query.filter(
or_( or_(
@@ -284,12 +283,14 @@ class ModelConfigRepository:
if is_active: if is_active:
query = query.filter(ModelConfig.is_active) query = query.filter(ModelConfig.is_active)
models = query.order_by(ModelConfig.name).all() query = query.filter(ModelConfig.is_composite == False)
models = query.order_by(ModelConfig.created_at.desc()).all()
db_logger.debug(f"根据类型查询模型配置成功: 数量={len(models)}") db_logger.debug(f"根据类型查询模型配置成功: 数量={len(models)}")
return models return models
except Exception as e: except Exception as e:
db_logger.error(f"根据类型查询模型配置失败: type={model_type} - {str(e)}") db_logger.error(f"根据类型查询模型配置失败: types={model_types} - {str(e)}")
raise raise
@staticmethod @staticmethod

View File

@@ -729,10 +729,21 @@ class ModelApiKeyService:
@staticmethod @staticmethod
def delete_api_key(db: Session, api_key_id: uuid.UUID) -> bool: def delete_api_key(db: Session, api_key_id: uuid.UUID) -> bool:
"""删除API Key""" """删除API Key"""
if not ModelApiKeyRepository.get_by_id(db, api_key_id): api_key = ModelApiKeyRepository.get_by_id(db, api_key_id)
if not api_key:
raise BusinessException("API Key不存在", BizCode.NOT_FOUND) raise BusinessException("API Key不存在", BizCode.NOT_FOUND)
model_config_ids = [mc.id for mc in api_key.model_configs]
success = ModelApiKeyRepository.delete(db, api_key_id) success = ModelApiKeyRepository.delete(db, api_key_id)
for model_config_id in model_config_ids:
model_config = ModelConfigRepository.get_by_id(db, model_config_id)
if model_config:
has_active_key = any(key.is_active for key in model_config.api_keys)
if not has_active_key and model_config.is_active:
model_config.is_active = False
db.commit() db.commit()
return success return success