# Model Management ## Purpose 管理模型的增删改查,通过 handler → service → repository 分层实现业务逻辑和数据访问,支持供应商关联验证。 ### Requirement: 创建模型配置 网关 SHALL 允许为供应商创建新的模型配置。 #### Scenario: 使用有效数据创建模型 - **WHEN** 向 `/api/models` 发送 POST 请求,携带有效的模型数据(id, provider_id, model_name) - **THEN** 网关 SHALL 在数据库中创建新的模型记录 - **THEN** 网关 SHALL 返回创建的模型,状态码为 201 - **THEN** 模型 SHALL 默认启用 #### Scenario: 使用不存在的供应商创建模型 - **WHEN** 向 `/api/models` 发送 POST 请求,携带不存在的 provider_id - **THEN** 网关 SHALL 返回错误,状态码为 400 (Bad Request) - **THEN** 错误 SHALL 指示供应商不存在 **变更说明:** handler 通过 ModelService 调用,数据访问通过 ModelRepository 和 ProviderRepository。API 接口保持不变。 ### Requirement: 列出所有模型 网关 SHALL 允许获取所有模型配置。 #### Scenario: 成功列出模型 - **WHEN** 向 `/api/models` 发送 GET 请求 - **THEN** 网关 SHALL 返回所有模型的列表 - **THEN** 每个模型 SHALL 包含 id, provider_id, model_name, enabled, created_at **变更说明:** 数据访问从 config 包迁移到 ModelRepository。API 接口保持不变。 ### Requirement: 按供应商列出模型 网关 SHALL 允许获取特定供应商的模型。 #### Scenario: 列出存在供应商的模型 - **WHEN** 向 `/api/models?provider_id=` 发送 GET 请求 - **THEN** 网关 SHALL 返回指定供应商的模型列表 **变更说明:** 通过 ModelService 和 ModelRepository 实现。API 接口保持不变。 ### Requirement: 更新模型配置 网关 SHALL 允许更新现有模型配置。 #### Scenario: 使用有效数据更新模型 - **WHEN** 向 `/api/models/:id` 发送 PUT 请求,携带有效的模型数据 - **THEN** 网关 SHALL 更新数据库中的模型记录 - **THEN** 网关 SHALL 返回更新后的模型 #### Scenario: 更新模型供应商 - **WHEN** 向 `/api/models/:id` 发送 PUT 请求,携带新的 provider_id - **THEN** 网关 SHALL 验证新供应商是否存在 - **THEN** 网关 SHALL 更新模型的供应商关联 **变更说明:** 通过 ModelService、ModelRepository 和 ProviderRepository 实现。API 接口保持不变。 ### Requirement: 删除模型配置 网关 SHALL 允许删除模型配置。 #### Scenario: 删除存在的模型 - **WHEN** 向 `/api/models/:id` 发送 DELETE 请求,携带有效的模型 ID - **THEN** 网关 SHALL 删除模型记录 - **THEN** 网关 SHALL 返回状态码 204 (No Content) **变更说明:** 通过 ModelService 和 ModelRepository 实现。API 接口保持不变。 ### Requirement: 使用 service 层处理业务逻辑 Handler SHALL 通过 ModelService 处理业务逻辑。 #### Scenario: 调用 service 方法 - **WHEN** handler 收到请求 - **THEN** SHALL 调用对应的 ModelService 方法(Create、Get、List、Update、Delete) - **THEN** SHALL 使用 domain.Model 类型 #### Scenario: 供应商验证 - **WHEN** 创建或更新模型 - **THEN** SHALL 在 service 层验证供应商存在 - **THEN** SHALL 通过 ProviderRepository 查询供应商 ### Requirement: 使用 repository 层访问数据 Service SHALL 通过 ModelRepository 访问数据。 #### Scenario: 调用 repository 方法 - **WHEN** service 处理业务逻辑 - **THEN** SHALL 调用对应的 ModelRepository 方法 - **THEN** SHALL 使用 domain.Model 类型 #### Scenario: 数据验证 - **WHEN** 创建或更新模型 - **THEN** SHALL 在 service 层验证业务规则 - **THEN** SHALL 在 repository 层执行数据库操作