1
0
Files
nex/openspec/specs/model-management/spec.md
lanyuanxiaoyao f18904af1e feat: 实现分层架构,包含 domain、service、repository 和 pkg 层
- 新增 domain 层:model、provider、route、stats 实体
- 新增 service 层:models、providers、routing、stats 业务逻辑
- 新增 repository 层:models、providers、stats 数据访问
- 新增 pkg 工具包:errors、logger、validator
- 新增中间件:CORS、logging、recovery、request ID
- 新增数据库迁移:初始 schema 和索引
- 新增单元测试和集成测试
- 新增规范文档:config-management、database-migration、error-handling、layered-architecture、middleware-system、request-validation、structured-logging、test-coverage
- 移除 config 子包和 model_router(已迁移至分层架构)
2026-04-16 00:47:20 +08:00

110 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Model Management
## MODIFIED Requirements
### 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=<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 接口保持不变。
## ADDED Requirements
### 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 层执行数据库操作